1

私は、4 つの異なるアカウントからメールを定期的に送信するコードに取り組んでいます。そのうちの 2 つは gmail アカウントで、残りの 2 つは yahoo アカウントです。コードを書き始めたとき、次のコードを使用して両方の gmail アカウントからすべてのメールを送信できました。

    def sendGmail(self, fromaddr, toaddr, username, password, 
        email_body, email_subject
    ):          
    # Build the email
    msg = MIMEText(email_body)
    msg['Subject'] = email_subject
    msg['From'] = fromaddr
    msg['To'] = toaddr

    try:
        # The actual mail send
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.starttls()  
        server.login(username,password)  
        server.sendmail(fromaddr, toaddr, msg.as_string())  
        server.quit()
        print "email sent: %s" % fromaddr
    except Exception as e:
        print "Something went wrong when sending the email %s" % fromaddr
        print e

前述したように、このコードは完全に機能しました。別のメソッドである sendYahoomail() を追加したので、sendGmail() を使用した場合の例外として (530、「アクセスが拒否されました」) が常に発生します。私のYahooメソッドとは何の関係もないと確信しており、ブラウザからgmailの資格情報で正しくログインできます。

何が間違っている可能性がありますか、または Gmail がコードを介して送信することを望んでいませんか?

4

2 に答える 2

2

上記のコードを Gmail アカウント (実際には Google Apps アカウントですが、同じはずです) で試してみましたが、問題なく動作します。間違った「From」ヘッダーを試してみたり、SMTP レベルで間違った送信元アドレスを使用したりしました。どちらの場合も、Gmail でメールを送信できましたが、送信時に静かにヘッダーを修正したようです。それでも、差出人アドレスがユーザー名と一致することを再確認したい場合があります。また、現在 @ の前の部分だけを使用している場合は、完全な電子メール アドレスをユーザー名として使用してみてください。

また、間違ったパスワードを試してみたところ、表示されているものとは異なるエラー 535 が表示されました。2 要素認証が有効になっているため、アプリケーション固有のパスワードではなく実際のパスワードを試してみましたが、それでも 535 エラーが発生しました (ただし、「アプリケーション固有のパスワードが必要です」というメッセージが表示されます)。

ISP が Gmail への SMTP 接続を傍受するように設定している可能性はありますか? 私の ISP はポート 587 で Gmail へのアクセスをブロックしたことがありますが、ポート 465 はまだ機能していました。おそらく、念smtplib.SMTP_SSLのためポート 465 で使用してみて、それがさらに楽しくなるかどうかを確認してみてください。

Gmail がその理由で送信を拒否している場合 (たとえば、他のプロバイダーがスパムのブラックリストに登録されている場合など) に備えて、別のプロバイダーのアドレスに送信することもできます。また、メールがスパムのように見える可能性がある場合は、本物のメールに近いメッセージの件名と本文を使用してコードを作成し、それが役立つかどうかを確認してください。

于 2013-04-27T08:36:38.500 に答える
1

これが役立つかもしれません: https://support.google.com/mail/answer/14257

基本的に、Google はなじみのないサーバーからのサインインの試みを検出し、それをブロックしました。上記のリンクを使用すると、ブロックの解除を試みることができます。

うまくいくこともあれば、うまくいかないこともあります。

于 2014-01-21T18:33:33.503 に答える