Почему вы не можете изменить адрес отправителя при использовании smtplib и Gmail SMTP в Python для отправки электронных писем?

В настоящее время я пытаюсь отправить электронную почту через smtplib со следующим кодом:

import smtplib
import email.utils
from email.mime.text import MIMEText

smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login('username@gmail.com', 'pwd')
msg['Subject'] = "subject line"
msg['From'] = 'newusername@gmail.com'
msg['To'] = 'friend@gmail.com'
smtpserver.sendmail(sender, recipients, msg.as_string())

Когда я делаю что-то подобное, вместо того, чтобы получатель получал письмо от newusername@gmail.comони получают это от username@gmail.com, который был электронным письмом, которое я использовал для аутентификации.

Есть ли способ изменить это?

1 ответ

Это преднамеренная функция безопасности в gmail и других общедоступных почтовых серверах, называемая SMTP AUTH.

Без этой функции любой пользователь с адресом Gmail может отправлять почту, выдавая себя за другого человека с адресом Gmail. Я мог бы отправить сообщение, утверждающее, что оно от вас, и получатель не сможет узнать, что это не от вас, и вы не сможете доказать, что это не от вас.

Но это все равно не имеет значения, потому что спамеры будут отправлять на ваш адрес гораздо больше электронной почты, чем вы, что адреса электронной почты будут фактически бессмысленными, и вся система электронной почты развалится. Что почти произошло в конце 90-х годов. Только согласованная кампания, требующая SMTP AUTH на всех открытых серверах отправки, включая внесение в черный список всей почты с серверов, которые не соответствуют требованиям (даже тех, которые использовали проверку POP-before-SMTP, IMAP-before-SMTP, IP/MAC или другие альтернативы SMTP AUTH) удалось удержать спамеров от разрушения всего.

Позже была добавлена ​​еще одна мера безопасности / защиты от спама под названием DKIM, которую также использует gmail: большинство серверов выбрасывают любые сообщения, которые не подписаны исходным сервером, что указывает на то, что сервер полагает, что сообщение было получено от того, кто его отправил. говорит, что это пришло. Очевидно, что Gmail не будет подтверждать, что сообщение пришло с newusername когда это на самом деле пришло из username, 1 И если они это сделают, люди, которые управляют другими серверами, просто заносят в черный список подписи gmail, бессмысленно.


1. Если у них нет причин полагать, что username имеет право отправлять почту как newusername - корпоративные почтовые серверы иногда имеют такую ​​функцию, которая позволяет вам настраивать такие вещи, например, чтобы секретарь мог отправлять почту с адреса своего босса без пароля его босса.

Другие вопросы по тегам