2009-04-22 4 views
24

は、ここに私のスクリプトです。このスクリプトでは、gmailの要件のためにstarttlsを使用しています。私は2つのWebホスト、1and1とwebfactionでこれを試しました。 1and1は私に「接続が拒否されました」というエラーを表示し、webfactionはエラーを報告しませんが、電子メールは送信しません。私はスクリプトに間違ったことは何も見えないので、ウェブホストに関連していると思っています。どんな考えやコメントも大歓迎です。たりするsmtplibとGmailのPythonスクリプトの問題

EDIT:デバッグモードを有効にしました。出力からは、正常にメッセージを送信したようです...私はそれを受け取ったことはありません。

send: 'ehlo web65.webfaction.com\r\n' 
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n' 
reply: '250-SIZE 35651584\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250 PIPELINING\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84] 
SIZE 35651584 
8BITMIME 
STARTTLS 
ENHANCEDSTATUSCODES 
PIPELINING 
send: 'STARTTLS\r\n' 
reply: '220 2.0.0 Ready to start TLS\r\n' 
reply: retcode (220); Msg: 2.0.0 Ready to start TLS 
send: 'ehlo web65.webfaction.com\r\n' 
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n' 
reply: '250-SIZE 35651584\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-AUTH LOGIN PLAIN\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250 PIPELINING\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84] 
SIZE 35651584 
8BITMIME 
AUTH LOGIN PLAIN 
ENHANCEDSTATUSCODES 
PIPELINING 
send: 'AUTH PLAIN *****\r\n' 
reply: '235 2.7.0 Accepted\r\n' 
reply: retcode (235); Msg: 2.7.0 Accepted 
send: 'mail FROM:<[email protected]> size=12\r\n' 
reply: '250 2.1.0 OK 4sm652580yxq.48\r\n' 
reply: retcode (250); Msg: 2.1.0 OK 4sm652580yxq.48 
send: 'rcpt TO:<[email protected]>\r\n' 
reply: '250 2.1.5 OK 4sm652580yxq.48\r\n' 
reply: retcode (250); Msg: 2.1.5 OK 4sm652580yxq.48 
send: 'data\r\n' 
reply: '354 Go ahead 4sm652580yxq.48\r\n' 
reply: retcode (354); Msg: Go ahead 4sm652580yxq.48 
data: (354, 'Go ahead 4sm652580yxq.48') 
send: 'Hello world.\r\n.\r\n' 
reply: '250 2.0.0 OK 1240421143 4sm652580yxq.48\r\n' 
reply: retcode (250); Msg: 2.0.0 OK 1240421143 4sm652580yxq.48 
data: (250, '2.0.0 OK 1240421143 4sm652580yxq.48') 
+2

の両方で利用できる、gitまたはpipをご覧ください。 – gimel

+1

これらの出力メッセージを取得するにはどうすればデバッグモードをオンにしますか? – trusktr

+3

smtplib.set_debuglevel(True)はあなたをソートします、@trusktr – hd1

答えて

7

私はGmailのSMTPサーバーは、あなたから接続するIPアドレスをDNSの逆引きを行い、そして何のドメインが見つからない場合、接続を拒否していると思います。これは、スパマーが自分のSMTPサーバーをオープンリレーとして使用しないようにするためです。

+4

あなたのインターネットアクセスプロバイダは、自分以外のsmtpサーバへの発信接続を禁止することもできます。 –

+1

私はそれがISPだと思います。私はコードを試して、それは私のためにうまくいった。 – hwiechers

+35

GMailがDNSルックアップを逆にして接続を拒否した場合、どうすればthunderbirdのようなデスクトップメールクライアントをGmailのsmtp経由でメールを送信できますか? –

8

有効なメッセージを作成しようとしましたか?

from email.MIMEText import MIMEText 

msg = MIMEText('body') 
msg['Subject'] = 'subject' 
msg['From'] = "..." 
msg['Reply-to'] = "..." 
msg['To'] = "..." 
2

あなたはあなたのアカウントに自分のアカウントから送信されたメッセージは、おそらく表示されます場所それはだとして、Gmailであなたの「送信済み」フォルダを確認する必要があります。自分のセーブ

0

を私は上記のリンクに行き、に送信するためのアドレスに異なる3を持っていたが、私は受け取りました3つの電子メールが同じアドレスに、3つの電子メールが#3のアドレスに送信されます。

http://mynthon.net/howto/-/python/python%20-%20logging.SMTPHandler-how-to-use-gmail-smtp-server.txt

import logging 
import logging.handlers 

class TlsSMTPHandler(logging.handlers.SMTPHandler): 
def emit(self, record): 
    """ 
    Emit a record. 

    Format the record and send it to the specified addressees. 
    """ 
    try: 
     import smtplib 
     import string # for tls add this line 
     try: 
      from email.utils import formatdate 
     except ImportError: 
      formatdate = self.date_time 
     port = self.mailport 
     if not port: 
      port = smtplib.SMTP_PORT 
     smtp = smtplib.SMTP(self.mailhost, port) 
     msg = self.format(record) 
     msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % (
         self.fromaddr, 
         string.join(self.toaddrs, ","), 
         self.getSubject(record), 
         formatdate(), msg) 
     if self.username: 
      smtp.ehlo() # for tls add this line 
      smtp.starttls() # for tls add this line 
      smtp.ehlo() # for tls add this line 
      smtp.login(self.username, self.password) 
     smtp.sendmail(self.fromaddr, self.toaddrs, msg) 
     smtp.quit() 
    except (KeyboardInterrupt, SystemExit): 
     raise 
    except: 
     self.handleError(record) 

logger = logging.getLogger() 

gm = TlsSMTPHandler(("smtp.gmail.com", 587), '[email protected]', ['[email protected]', '[email protected]', '[email protected]'], 'unable to find Error!', ('[email protected]', 'mypassword')) 
gm.setLevel(logging.ERROR) 

logger.addHandler(gm) 

try: 
    1/0 
except: 
    logger.exception('It NO work for me!!-') 
6

私はOPはまだこの答え気遣うかどうか知りませんが、うまくいけば他の誰かが、これは便利かもしれませんが、同様の問題をトラブルシューティングするための努力でここに自分自身を発見しました。結局のところ、GoogleはSMTPサーバーの使用を許可する方法を変更しました。あなたはいくつかの事をチェックしたいと思うでしょう:

  1. あなたは '送信元'アドレスとして認証に使用したのと同じアドレスを使用しています。私が間違っていないならば、これはあなたがフィールドから欲しがっていても大丈夫だが、セキュリティ上の理由から、多くのSMTPホストサイト(Googleを含む)は、これを認証済みのアドレスに制限するようになった。

  2. 「安全性の低いアプリ」によってアカウントにアクセスできるようにします(読んでください:収益が発生しないアプリ)。あなたのアカウントにログインしてここに移動するには: https://www.google.com/settings/security/lesssecureapps

  3. ポート587にはtlsを使用してください。なぜ本当にわからないけど、ポート465で素晴らしいプレイをすることはできません。

これは誰かを助けることを望みます。

+0

あなたはどこにいましたか? –

5

ここで自己宣伝するものもありますが、私は正当な理由で感じます。

あなたは、文字通りのみ、あなたが書いた正確に何をするために、このコードが必要になります。

import yagmail 
yag = yagmail.SMTP('[email protected]') 
yag.send('[email protected]', subject = None, contents = 'Hello') 

または1つのライナー:

yagmail.SMTP('[email protected]').send('[email protected]', None, 'Hello world.') 

いいです何が、私はあなたを保存するためにキーリングを使用することを提案することですパスワードを使用しているため、スクリプトにパスワードが表示されることはありません。パッケージ/インストールの場合

あなたが代わりに直接Gmailに呼び出すのでは、通常のSMTPリレーを経由してメールを送信することができますPythonの2と3

+0

upvoteありがとう、私は本当にパッケージにもっと注意をしようとしています! – PascalVKooten

+1

'SMTPAuthenticationError:あなたのウェブブラウザからログインし、\ n5.7.14してからもう一度やり直してください。\ n5.7.14 \ n5.7.14で詳細を確認してください。https://support.google.com/mail/answer/78754 vl1sm48001045pbc.31 - gsmtp ') ' –

+0

@ Death-Stalkerあなたのパスワードを間違えたようですね? – PascalVKooten

関連する問題