此代码可以正常工作并向我发送电子邮件:
import smtplib
#SERVER = "localhost"
FROM = 'monty@python.com'
TO = ["jon@mycompany.com"] # must be a list
SUBJECT = "Hello!"
TEXT = "This message was sent with Python's smtplib."
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP('myserver')
server.sendmail(FROM, TO, message)
server.quit()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将其包装在这样的函数中:
def sendMail(FROM,TO,SUBJECT,TEXT,SERVER):
import smtplib
"""this is some test documentation in the function"""
message = """\
From: %s
To: …Run Code Online (Sandbox Code Playgroud) 你能建议一个简单的SMTP服务器,它有非常基本的API(非常基本的意思是读,写,删除电子邮件),可以在linux机器上运行吗?我只需要将电子邮件的关键字转换为XML格式并将其FTP到另一台机器.
我想直接从脚本发送电子邮件到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记录等?
我使用Python使用外部SMTP服务器发送电子邮件.在下面的代码中,我尝试使用smtp.gmail.com从Gmail 密码发送电子邮件到其他ID.我能够使用下面的代码生成输出.
import smtplib
from email.MIMEText import MIMEText
import socket
socket.setdefaulttimeout(None)
HOST = "smtp.gmail.com"
PORT = "587"
sender= "somemail@gmail.com"
password = "pass"
receiver= "receiver@somedomain.com"
msg = MIMEText("Hello World")
msg['Subject'] = 'Subject - Hello World'
msg['From'] = sender
msg['To'] = receiver
server = smtplib.SMTP()
server.connect(HOST, PORT)
server.starttls()
server.login(sender,password)
server.sendmail(sender,receiver, msg.as_string())
server.close()
Run Code Online (Sandbox Code Playgroud)
但是我必须在没有外部SMTP服务器的帮助下做同样的事情.如何用Python做同样的事情?
请帮忙.