-4

以下に示すGmail SMTPセットアップを介してメールを送信するpythonスクリプトがあり、正常に動作します。ただし、これを関数に変換しようとすると、メールが送信されなくなります。あなたが私に与えることができる助けをいただければ幸いです。

import smtplib

SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587

sender = 'account@gmail.com'
password = 'password'
recipient = ['user@Email1.com', 'user@Email2.com']
subject = 'Gmail SMTP Test'
body = 'blah blah blah'

body = "" + body + ""

headers = ["From: " + sender,
       "Subject: " + subject,
       "To: " + ", " .join(recipient),
       "MIME-Version: 1.0",
       "Content-Type: text/html"]
headers = "\r\n".join(headers)

session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

session.ehlo()
session.starttls()
session.ehlo
session.login(sender, password)

session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()

これを関数にラップしようとすると、メールが送信されなくなります。def SendEmail() でいくつかの異なるバリエーションを試しましたが、うまくいきませんでした。

import smtplib

def SendEmail(self): 
    SMTP_SERVER = 'account.gmail.com'
    SMTP_PORT = 587

    sender = 'account@gmail.com'
    password = 'Password'
    recipient = ['user@Email1.com', 'user@Email2.com']
    subject = 'Gmail SMTP Test'
    body = 'blah blah blah'

    body = "" + body + ""

    headers = ["From: " + sender,
           "Subject: " + subject,
           "To: " + ", " .join(recipient),
           "MIME-Version: 1.0",
           "Content-Type: text/html"]
    headers = "\r\n".join(headers)

    session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

    session.ehlo()
    session.starttls()
    session.ehlo
    session.login(sender, password)

    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
    session.quit()
4

1 に答える 1

4

関数を呼び出すのを忘れました。selfさらに、引数は必要ありません。

import smtplib

def SendEmail():
    SMTP_SERVER = 'account.gmail.com'
    SMTP_PORT = 587

    sender = 'account@gmail.com'
    password = 'Password'
    recipient = ['user@Email1.com', 'user@Email2.com']
    subject = 'Gmail SMTP Test'
    body = 'blah blah blah'

    body = "" + body + ""

    headers = ["From: " + sender,
           "Subject: " + subject,
           "To: " + ", " .join(recipient),
           "MIME-Version: 1.0",
           "Content-Type: text/html"]
    headers = "\r\n".join(headers)

    session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

    session.ehlo()
    session.starttls()
    session.ehlo
    session.login(sender, password)

    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
    session.quit()

SendEmail()

また、別の構成ファイルのように定数を移動するSMTP_SERVERか、関数の外に移動することをお勧めします。さらに、変数を関数内にハードコードするのではなく、関数の引数として渡すrecipientと見栄えが良くなります。subjectbody

また、このsession.ehlo(括弧なし) 行は何もしません。

于 2013-08-20T18:12:06.890 に答える