如何直接从服务器使用python发送电子邮件而不使用smtp

Moh*_*yni 9 python email smtp python-3.x

我是 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);
?> 
Run Code Online (Sandbox Code Playgroud)

但在 python 中,您必须使用 smtplib 和 gmail 或 hotmail 服务器来发送电子邮件。我想知道是否可以直接从服务器发送带有 python 的电子邮件?

Rob*_*utt 9

其他选项

当您在 PHP 中使用邮件功能时,它使用的是您所在主机的本地 sendmail,而后者只是本地的 SMTP 中继,当然,并不真正建议在本地发送电子邮件,因为这些邮件可能没有很好的送达率由于 DKIM、SPF 和其他保护机制。如果您关心可交付性,我建议您使用

a) 用于发送邮件的外部 SMTP 服务器,通过该服务器为发送域正确配置。

b) 一个 API,例如 AWS SES、Mailgun 或等效物。

如果您不关心可传递性,那么您当然可以使用 Python 中的本地 SendMail,SendMail 会像任何其他 SMTP 服务器一样侦听端口 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")
Run Code Online (Sandbox Code Playgroud)

  • 我收到此错误:`sock.connect(sa) ConnectionRefusedError: [WinError 10061] 无法建立连接,因为目标机器主动拒绝它` (2认同)