Как отправить письмо с Python непосредственно с сервера и без SMTP - PullRequest
0 голосов
/ 14 января 2019

Я программист 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 голосов
/ 14 января 2019

Другие опции

Когда вы используете почтовые функции в PHP, он использует локальный sendmail хоста, на котором вы находитесь, что, в свою очередь, является просто SMTP-ретранслятором локально, конечно, локальная отправка электронных писем не рекомендуется, поскольку они, вероятно, не имеют хорошая скорость доставки благодаря DKIM, SPF и другим механизмам защиты. Если вы заботитесь о доставке, я бы порекомендовал использовать либо

a) Внешний SMTP-сервер для отправки почты, который правильно настроен для домена-отправителя.

b) API, такой как AWS SES, Mailgun или эквивалентный.

Если вы не заботитесь о доставке, то вы, конечно, можете использовать локальный SendMail из Python, SendMail прослушивает петлевой адрес (127.0.0.1) на порту 25, как и любой другой SMTP-сервер, поэтому вы можете использовать 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...