如何直接从服务器发送python电子邮件而没有SMTP

时间:2019-01-14 15:56:56

标签: python python-3.x email smtp

我是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的电子邮件?

1 个答案:

答案 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")