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

2024-05-19 07:06:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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直接从服务器发送电子邮件?


Tags: to代码服务器com客户端messageexample电子邮件
1条回答
网友
1楼 · 发布于 2024-05-19 07:06:41

其他选项

当您在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")

相关问题 更多 >

    热门问题