313

Python を使用してメール (Gmail) を送信しようとしていますが、次のエラーが発生します。

Traceback (most recent call last):  
File "emailSend.py", line 14, in <module>  
server.login(username,password)  
File "/usr/lib/python2.5/smtplib.py", line 554, in login  
raise SMTPException("SMTP AUTH extension not supported by server.")  
smtplib.SMTPException: SMTP AUTH extension not supported by server.

Python スクリプトは次のとおりです。

import smtplib
fromaddr = 'user_me@gmail.com'
toaddrs  = 'user_you@gmail.com'
msg = 'Why,Oh why!'
username = 'user_me@gmail.com'
password = 'pwd'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
4

16 に答える 16

316
def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"

ポート 465 を使用する場合は、SMTP_SSLオブジェクトを作成する必要があります。

# SMTP_SSL Example
server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.ehlo() # optional, called by login()
server_ssl.login(gmail_user, gmail_pwd)  
# ssl server doesn't support or need tls, so don't call server_ssl.starttls() 
server_ssl.sendmail(FROM, TO, message)
#server_ssl.quit()
server_ssl.close()
print 'successfully sent the mail'
于 2012-09-14T12:19:26.740 に答える
224

EHLOあなたはただまっすぐにぶつかる前に言う必要がありますSTARTTLS

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()

また、実際には、メッセージ本文から空白行で区切られたメッセージヘッダーとメッセージヘッダーを作成しFrom:、EOLマーカーとして使用する必要があります。To:Subject:CRLF

例えば

msg = "\r\n".join([
  "From: user_me@gmail.com",
  "To: user_you@gmail.com",
  "Subject: Just a message",
  "",
  "Why, oh why"
  ])

ノート:

これを機能させるには、Gmailアカウントの設定で[安全性の低いアプリを許可する]オプションを有効にする必要があります。そうしないと、GmailがGoogle以外のアプリがアカウントにログインしようとしていることを検出したときに「重大なセキュリティアラート」が表示されます。

于 2012-04-13T19:57:54.350 に答える
19

あなたはOOPでダウンしていますか?

#!/usr/bin/env python


import smtplib

class Gmail(object):
    def __init__(self, email, password):
        self.email = email
        self.password = password
        self.server = 'smtp.gmail.com'
        self.port = 587
        session = smtplib.SMTP(self.server, self.port)        
        session.ehlo()
        session.starttls()
        session.ehlo
        session.login(self.email, self.password)
        self.session = session

    def send_message(self, subject, body):
        ''' This must be removed '''
        headers = [
            "From: " + self.email,
            "Subject: " + subject,
            "To: " + self.email,
            "MIME-Version: 1.0",
           "Content-Type: text/html"]
        headers = "\r\n".join(headers)
        self.session.sendmail(
            self.email,
            self.email,
            headers + "\r\n\r\n" + body)


gm = Gmail('Your Email', 'Password')

gm.send_message('Subject', 'Message')
于 2014-06-23T11:16:51.607 に答える
15

ここで見つけることができます:http://jayrambhia.com/blog/send-emails-using-python

smtp_host = 'smtp.gmail.com'
smtp_port = 587
server = smtplib.SMTP()
server.connect(smtp_host,smtp_port)
server.ehlo()
server.starttls()
server.login(user,passw)
fromaddr = raw_input('Send mail by the name of: ')
tolist = raw_input('To: ').split()
sub = raw_input('Subject: ')

msg = email.MIMEMultipart.MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = email.Utils.COMMASPACE.join(tolist)
msg['Subject'] = sub  
msg.attach(MIMEText(raw_input('Body: ')))
msg.attach(MIMEText('\nsent via python', 'plain'))
server.sendmail(user,tolist,msg.as_string())
于 2012-04-13T20:28:42.010 に答える
2

現在、Gmail API があり、REST 経由でメールを送信したり、メールを読んだり、下書きを作成したりできます。SMTP 呼び出しとは異なり、非ブロッキングであるため、リクエスト スレッドで電子メールを送信するスレッドベースの Web サーバー (Python Web サーバーなど) に適しています。API も非常に強力です。

  • もちろん、電子メールは Web サーバー以外のキューに渡す必要がありますが、オプションがあると便利です。

ドメインで Google Apps 管理者権限を持っている場合は、クライアントに包括的な権限を与えることができるため、セットアップが最も簡単です。それ以外の場合は、OAuth 認証と許可をいじる必要があります。

これを示す要点は次のとおりです。

https://gist.github.com/timrichardson/1154e29174926e462b7a

于 2014-10-31T04:12:18.443 に答える
1

古い問題のようsmtplibです。python2.7すべてにおいて正常に動作します。

更新:はい、server.ehlo()また助けることができます.

于 2012-04-13T20:04:01.930 に答える
-3
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("fromaddress", "password")
msg = "HI!"
server.sendmail("fromaddress", "receiveraddress", msg)
server.quit()
于 2015-12-04T14:01:16.787 に答える