1. ホーム
  2. python

[解決済み] PythonからSMTPを使用してメールを送信する

2022-07-17 05:31:55

質問

PythonからSMTPを使用してメールを送信するために、以下の方法を使用しています。これは使用する正しい方法ですか、または私が見逃しているgotchasがありますか?

from smtplib import SMTP
import datetime

debuglevel = 0

smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')

from_addr = "John Doe <[email protected]>"
to_addr = "[email protected]"

subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )

message_text = "Hello\nThis is a mail from your server\n\nBye\n"

msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" 
        % ( from_addr, to_addr, subj, date, message_text )

smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()

どのように解決するのですか?

私が使用しているスクリプトは非常に似ています。私は、MIMEメッセージを生成するためにemail.*モジュールを使用する方法の例として、ここにそれを投稿します。したがって、このスクリプトは、画像などを添付するために簡単に変更することができます。

私は、日付時刻ヘッダを追加するためにISPに依存しています。

私の ISP はメールを送信するために安全な smtp 接続を使用するよう要求しています。 http://www1.cs.columbia.edu/~db2501/ssmtplib.py )

あなたのスクリプトのように、SMTPサーバで認証するために使用されるユーザ名とパスワード(以下、ダミー値)は、ソースの中でプレーンテキストになっています。これはセキュリティ上の弱点ですが、最良の代替案は、これらの保護についてどれだけ注意深くなる必要があるか (必要であるか) によります。

=======================================

#! /usr/local/bin/python


SMTPserver = 'smtp.att.yahoo.com'
sender =     'me@my_email_domain.net'
destination = ['recipient@her_email_domain.com']

USERNAME = "USER_NAME_FOR_INTERNET_SERVICE_PROVIDER"
PASSWORD = "PASSWORD_INTERNET_SERVICE_PROVIDER"

# typical values for text_subtype are plain, html, xml
text_subtype = 'plain'


content="""\
Test message
"""

subject="Sent from Python"

import sys
import os
import re

from smtplib import SMTP_SSL as SMTP       # this invokes the secure SMTP protocol (port 465, uses SSL)
# from smtplib import SMTP                  # use this for standard SMTP protocol   (port 25, no encryption)

# old version
# from email.MIMEText import MIMEText
from email.mime.text import MIMEText

try:
    msg = MIMEText(content, text_subtype)
    msg['Subject']=       subject
    msg['From']   = sender # some SMTP servers will do this automatically, not all

    conn = SMTP(SMTPserver)
    conn.set_debuglevel(False)
    conn.login(USERNAME, PASSWORD)
    try:
        conn.sendmail(sender, destination, msg.as_string())
    finally:
        conn.quit()

except:
    sys.exit( "mail failed; %s" % "CUSTOM_ERROR" ) # give an error message