2012-03-19 30 views
7

smtp.gmail.comに直接接続して、スクリプトからGmailメールアカウントに直接メールを送信したいと思います。認証なしで直接SMTPサーバーにメールを送信する方法は?

しかし、私はスクリプトにGmailのパスワードを持っていない方がいいです。私が読んだところでは、Gmailは自分のユーザーを含むメールを配信する前に認証が必要なようです。

私の質問は、そのSMTPサーバーにはGmailの資格情報がないため、今まで配信された別のSMTPサーバーからメールが届くのですか? Gmailは「anonymous」の送信者のみの認証を必要としますが、私のスクリプトはパーソナルコンピュータ上で実行されているため、セキュリティが強化されていますか?ここで私はPythonスクリプト実行していますされています

import smtplib 
import email 
msg = email.message.Message() 
msg["From"] = "[email protected]" 
msg["To"] = "[email protected]" 
msg["Subject"] = "Test message" 
server = smtplib.SMTP("smtp.gmail.com",587) 
server.starttls() 
server.ehlo_or_helo_if_needed() 
try: 
    failed = server.sendmail("[email protected]","[email protected]", msg.as_string()) 
    server.close() 
except Exception as e: 
    print(e) 

を、私はこのスクリプトを実行すると、出力は次のようになります。

(530, b'5.5.1 Authentication Required. Learn more at 
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 fw5sm21125889wib.0', '[email protected]') 

私の質問があり、外部のSMTPサーバがこの問題を回避する方法は?そして、ローカルスクリプトで複製可能なものは何ですか、あるいは正しい逆DNSレコードやSPFレコードなどが必要ですか?

答えて

5

あなたが認証なしで、いくつかの外部のSMTPサーバ(またはローカルSMTP)を使用することができますが、 [「から」] MSGの@ google.comであるため、送信されたメッセージは、一方で、Googleのスパムフィルタによって捕捉されます実際のSMTPはsmtp.gmail.comではありません。

これらのSMTPサーバーは、ISPのDNSで正しい逆ゾーンを持っている必要があります。そうしないと、このsmtpはGoogleによってブロックされます。

0

Gmailのsmtp-serverを認証なしで使用することはできません。それはGoogleのポリシーです。アカウントのパスワードを入力する必要があります。しかし、別の方法があります。 Gmail APIでGAE(Google App Engine)を使用できます。このようにして、メッセージを直接送信することができます。

17

本当に良い質問です。私はインラインで返信しています。

私は直接smtp.gmail.comに接続して、スクリプトからGmailメールアカウントにメールを送信したいと思います。すべてsmpt.gmail.com

最初に(他のメールサーバからの)メールを受け入れるメールサーバではなく、むしろのGmailユーザーがログインし、したがって送信したり、電子メールをチェックすることができます。他のメールサーバーからメールを受け取るGmailメールサーバーを探したい場合。私たちは、端末上で、次のCMDを実行することができます。

dig mx gmail.com +short

出力:

10 alt1.gmail-smtp-in.l.google.com. 
40 alt4.gmail-smtp-in.l.google.com. 
5 gmail-smtp-in.l.google.com. 
30 alt3.gmail-smtp-in.l.google.com. 
20 alt2.gmail-smtp-in.l.google.com. 

gmail-smtp-in.l.google.com.は、我々が優先としてそれを使用の最小値を持っているので、メールサーバ

しかし、私はスクリプトにGmailのパスワードを持っていない方がいいです。私が読んだところでは、Gmailは自分のユーザーを含むメールを配信する前に認証が必要なようです。

ちょうど1したがって、我々はユーザーの資格情報を要求し、ログインして送信/に/それぞれのアカウントからのメールをチェックするためにsmtp.gmail.comを使用しています。しかし私たちは、私の質問は、メールを別のSMTPサーバーから来ているか、であるそのメールサーバすなわちgmail-smtp-in.l.google.com(以下例)

に電子メールを送信するには資格証明書を必要としませんそのSMTPサーバーにはGmailの資格情報がないため、これまでに配信されたものではありません。 Gmailは「匿名」の送信者の認証のみを必要とします。私のスクリプトはパーソナルコンピュータ上で実行されているため、セキュリティが強化されていますか?ここで私が実行しているPythonスクリプトさ:

を私たち上記の議論から自分自身を明らかにしてきたように、我々はGmailのメールサーバーに接続があれば、Gmailのメールサーバに接続するために、Gmailの資格情報を必要としないパーソナルコンピュータを使用していくつかの電子メールを送信するだけでなく、DKIM、SPFなどを使用してドメインの評判とアカウンタビリティを構築するために必要な電子メールをもっと送ることができます。

次のpythonスクリプトは、認証なしでメールをgmailアカウントに送信します。

import smtplib 

fromaddr = '[email protected]' 
toaddrs = ['[email protected]'] 
msg = ''' 
    From: {fromaddr} 
    To: {toaddr} 
    Subject: testin'  
    This is a test 
    . 
''' 

msg = msg.format(fromaddr =fromaddr, toaddr = toaddrs[0]) 
# The actual mail send 
server = smtplib.SMTP('gmail-smtp-in.l.google.com:25') 
server.starttls() 
server.ehlo("example.com") 
server.mail(fromaddr) 
server.rcpt(toaddrs[0]) 
server.data(msg) 
server.quit() 

または、次のTelnetを試みる何を表し、ここで "25" を

telnet gmail-smtp-in.l.google.com 25 

HELO sendingdomain.com 

MAIL FROM:<[email protected]> 

RCPT TO:<[email protected]> 

DATA 
From: <[email protected]> 
To: <[email protected]> 
Subject: Just a test email 

The body of the mail goes here.   
. 

QUIT 
+0

スニペット? @MaK –

+0

25はSMTPポートで、メールサーバーとの通信に使用されます。 https://en.m.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol – MaK

+0

はい@Makですが、静的ですか?または動的ですか?彼らの任意のポートは利用可能ですか? –

関連する問題