Как отправить почту непосредственно на SMTP-сервер без проверки подлинности?

Я хотел бы отправить электронное письмо непосредственно из script в учетную запись электронной почты Gmail, напрямую подключившись к smtp.gmail.com.

Однако я бы предпочел не иметь пароль gmail в script. Из того, что я прочитал, кажется, что Gmail требует аутентификации, прежде чем она отправит любую почту, в том числе ее собственным пользователям.

Мой вопрос заключается в том, как почта поступает с другого сервера SMTP, когда-либо поставленного, поскольку этот SMTP-сервер не будет иметь учетные данные Gmail. Требуется ли для Gmail только аутентификация для "анонимных" отправителей, а поскольку мой script работает на персональном компьютере, он подвержен более высокой безопасности? Вот питон script Я запускаю:

import smtplib
import email
msg = email.message.Message()
msg["From"] = "[email protected]"
msg["To"] = "[email protected]"
msg["Subject"] = "Test message"
server = smtplib.SMTP("smtp.gmail.com",587)
server.starttls()
server.ehlo_or_helo_if_needed()
try:
    failed = server.sendmail("[email protected]","[email protected]", msg.as_string())
    server.close()
except Exception as e:
    print(e)

Когда я запускаю этот script, вывод:

(530, b'5.5.1 Authentication Required. Learn more at
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 fw5sm21125889wib.0', '[email protected]')

Мой вопрос: как внешние SMTP-серверы избегают этой проблемы? И что они делают реплицируемыми в локальном script, или для этого требуются правильные обратные DNS-записи, записи SPF и т.д.?

Ответы

Ответ 1

Вы можете использовать некоторые внешние SMTP-серверы без проверки подлинности (или локального SMTP), но отправленное сообщение будет обнаружено фильтром спама Google, потому что msg [ "From" ] - @google.com, тогда как фактический SMTP не smtp.gmail.com.

Эти SMTP-серверы также должны иметь правильную обратную зону в DNS-провайдере, и в противном случае этот smtp будет заблокирован Google.

Ответ 2

Это действительно хороший вопрос, и я отвечаю в строке.

Я хотел бы отправить электронное письмо непосредственно из сценария на учетную запись электронной почты Gmail, подключившись напрямую к smtp.gmail.com.

Прежде всего smtp.gmail.com не является почтовым сервером, который принимает почту (от других почтовых серверов), а скорее позволяет пользователям Gmail войти в систему и, следовательно, отправлять или проверять электронную почту. Если мы хотим узнать почтовые серверы Gmail, которые принимают почту от других почтовых серверов. Мы можем запустить следующий cmd на терминале:

dig mx gmail.com +short

выход:

10 alt1.gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
5 gmail-smtp-in.l.google.com.
30 alt3.gmail-smtp-in.l.google.com.
20 alt2.gmail-smtp-in.l.google.com. 

Начиная с gmail-smtp-in.l.google.com. имеет самое низкое значение 5, мы используем его в качестве предпочтительного почтового сервера

Однако я бы предпочел не указывать пароль gmail в скрипте. Из того, что я прочитал, видно, что Gmail требует аутентификации, прежде чем он будет доставлять почту, в том числе и своим пользователям.

Точно один использует smtp.gmail.com для входа и отправки/проверки электронной почты в/из их соответствующих учетных записей, поэтому нам нужны учетные данные пользователя. Однако нам не нужны учетные данные для отправки электронных писем на его почтовый сервер, т.е. gmail-smtp-in.l.google.com (пример ниже)

Мой вопрос: как доставляется почта с другого SMTP-сервера, поскольку этот SMTP-сервер не будет иметь учетных данных Gmail. Требуется ли для Gmail только аутентификация для "анонимных" отправителей, и, поскольку мой сценарий выполняется на персональном компьютере, он более защищен? Вот скрипт Python, который я запускаю:

Как я пояснил из приведенного выше обсуждения, нам не нужны учетные данные Gmail для подключения к почтовым серверам Gmail, однако, если мы подключаемся к почтовым серверам Gmail с помощью персональных компьютеров, мы можем избежать отправки нескольких электронных писем, но для отправки большего количества электронных писем мы необходимо создать репутацию домена и подотчетность с использованием DKIM, SPF и т.д. (это совсем другой спектр).

Следующий скрипт Python отправляет электронную почту на учетную запись Gmail без аутентификации.

import smtplib

fromaddr = '[email protected]'
toaddrs  = ['[email protected]']
msg = '''
    From: {fromaddr}
    To: {toaddr}
    Subject: testin'     
    This is a test 
    .
'''

msg = msg.format(fromaddr =fromaddr, toaddr = toaddrs[0])
# The actual mail send
server = smtplib.SMTP('gmail-smtp-in.l.google.com:25')
server.starttls()
server.ehlo("example.com")
server.mail(fromaddr)
server.rcpt(toaddrs[0])
server.data(msg)
server.quit()  

Или попробуйте следующий фрагмент Telnet

telnet gmail-smtp-in.l.google.com 25

HELO sendingdomain.com

MAIL FROM:<[email protected]>

RCPT TO:<[email protected]>

DATA
From: <[email protected]>
To: <[email protected]>
Subject: Just a test email

The body of the mail goes here.          
.

QUIT

Ответ 3

Вы не можете использовать gmail smtp-сервер без проверки подлинности. Это политика Google. Вам необходимо ввести пароль своей учетной записи. Но есть и другой способ. Вы можете использовать GAE (Google App Engine) с API Gmail. Таким образом вы можете отправлять сообщения напрямую.