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

发布于 2021-01-29 15:20:44

我是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
被浏览
148
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    其他选择

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看