jan*_*nak 21 python authentication gmail smtp
我想直接从脚本发送电子邮件到Gmail电子邮件帐户,直接连接到smtp.gmail.com
.
但是,我宁愿不在脚本中使用gmail密码.根据我的阅读,Gmail似乎需要进行身份验证才能发送任何邮件,包括发送给自己的用户.
我的问题是,来自另一台SMTP服务器的邮件是如何传递的,因为该SMTP服务器不具有Gmail凭据.Gmail是否仅要求对" 匿名 "发件人进行身份验证,而且由于我的脚本在个人计算机上运行,因此它具有更高的安全性?这是我正在运行的python脚本:
import smtplib
import email
msg = email.message.Message()
msg["From"] = "user@gmail.com"
msg["To"] = "user@gmail.com"
msg["Subject"] = "Test message"
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.ehlo_or_helo_if_needed()
try:
failed = server.sendmail("user@gmail.com","user@gmail.com", msg.as_string())
server.close()
except Exception as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
当我运行此脚本时,输出为:
(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', 'user@gmail.com')
Run Code Online (Sandbox Code Playgroud)
我的问题是,外部SMTP服务器如何避免这个问题?它们是否可以在本地脚本中复制,还是需要正确的反向DNS记录,SPF记录等?
MaK*_*MaK 34
这是一个非常好的问题,我回复内联.
我想直接从脚本发送电子邮件到Gmail电子邮件帐户,直接连接到smtp.gmail.com.
首先,smtp.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.
Run Code Online (Sandbox Code Playgroud)
由于gmail-smtp-in.l.google.com.
具有最低值5,我们将其用作首选邮件服务器
但是,我宁愿不在脚本中使用gmail密码.根据我的阅读,Gmail似乎需要进行身份验证才能发送任何邮件,包括发送给自己的用户.
正好一个使用smtp.gmail.com登录和发送/检查各自帐户的电子邮件,因此我们需要用户凭据.但是,我们不需要向其邮件服务器发送电子邮件的凭据,即gmail-smtp-in.l.google.com(以下示例)
我的问题是,来自另一台SMTP服务器的邮件是如何传递的,因为该SMTP服务器不具有Gmail凭据.Gmail是否仅要求对"匿名"发件人进行身份验证,而且由于我的脚本在个人计算机上运行,因此它具有更高的安全性?这是我正在运行的python脚本:
正如我从上面的讨论中清楚地看到我们不需要Gmail凭据来连接到Gmail邮件服务器,但是如果我们使用个人计算机连接到Gmail邮件服务器,我们可以发送一些电子邮件,但是为了发送更多电子邮件我们需要使用DKIM,SPF等建立域名声誉和问责制(这是一个完全不同的范围).
以下python脚本无需身份验证即可将电子邮件发送到Gmail帐户.
import smtplib
fromaddr = 'sending@example.com'
toaddrs = ['receiving@gmail.com']
# string inside msg below must have "Subject: <subject line>\n"
# for a subject to be sent, and "To: " for the recipient to be shown in the email
msg = '''To: receiving@gmail.com
Subject: Subject line here\n
The body goes here
.
'''
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()
Run Code Online (Sandbox Code Playgroud)
或者尝试以下Telnet代码段
telnet gmail-smtp-in.l.google.com 25
HELO sendingdomain.com
MAIL FROM:<user@sending.com>
RCPT TO:<playingwithtelnet@gmail.com>
DATA
From: <user@sending.com>
To: <playingwithtelnet@gmail.com>
Subject: Just a test email
The body of the mail goes here.
.
QUIT
Run Code Online (Sandbox Code Playgroud)
max*_*ocl 10
您可以使用一些没有身份验证的外部SMTP服务器(或本地SMTP),但发送的邮件将被Google的垃圾邮件过滤器捕获,因为msg ["From"]是@ google.com,而实际的SMTP不是smtp.gmail .com.
那些SMTP服务器也必须在ISP的DNS中具有正确的反向区域,否则这个smtp将被谷歌阻止.
归档时间: |
|
查看次数: |
69705 次 |
最近记录: |