如何直接从服务器发送python电子邮件而没有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的电子邮件?
-
其他选择
当您在PHP中使用邮件功能时,它使用的是主机的本地sendmail,而该主机只是本地的SMTP中继,当然不建议在本地发送电子邮件,因为这些电子邮件的传递速度可能不高由于DKIM,SPF和其他保护机制。如果您担心传递性,建议您使用
a)一个外部SMTP服务器,用于通过它为发送域正确配置的发送邮件。
b)API,例如AWS SES,Mailgun或同等功能。
如果您不关心可传递性,那么您当然可以使用来自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")