我是php程序员,使用php可以直接通过服务器发送电子邮件,例如此代码将电子邮件发送给客户端:
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
但是在python中,您必须使用smtplib和gmail或hotmail服务器发送电子邮件。 我想知道是否有直接从服务器发送带有python的电子邮件?
答案 0 :(得分:1)
其他选项
当您在PHP中使用邮件功能时,它将使用您所在主机的本地sendmail,而该主机又只是本地的SMTP中继,当然不建议在本地发送电子邮件,因为这些电子邮件可能没有DKIM,SPF和其他保护机制可确保良好的交付率。如果您关心可交付性,我建议您使用
a)用于发送邮件的外部SMTP服务器,该服务器已为发送域正确配置。
b)一个API,例如AWS SES,Mailgun或等效的API。
如果您不关心可传递性,那么您当然可以使用来自Python的本地SendMail,就像其他任何SMTP服务器一样,SendMail侦听端口25上的回送地址(127.0.0.1),因此您可以使用smtplib通过SendMail无需使用外部SMTP服务器。
通过本地SMTP发送电子邮件
如果您有本地SMTP服务器(例如SendMail),请检查它是否正在按预期方式监听...
netstat -tuna
您应该看到它正在侦听端口25上的回送地址。
如果正在监听,那么您应该可以从Python执行类似的操作来发送电子邮件。
import smtplib
sender = 'no_reply@mydomain.com'
receivers = ['person@otherdomain.com']
message = """From: No Reply <no_reply@mydomain.com>
To: Person <person@otherdomain.com>
Subject: Test Email
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print("Successfully sent email")
except SMTPException:
print("Error: unable to send email")