Python не может отправлять электронные письма в Gmail - PullRequest
0 голосов
/ 30 мая 2018

У меня есть скрипт Python для отправки писем.Я использую это для отправки оповещений на мою электронную почту и телефон.Но по какой-то причине письма не принимаются при отправке на учетную запись Gmail.Большая разница между моим кодом и другими примерами заключается в том, что я не могу использовать smtp.gmail.com.Вот моя функция электронной почты / текста:

import smtplib

sender = 'xxxx@company.com'
smtpObj = smtplib.SMTP('smtp.company.com')

def text_func ( subject,text_message ):
    text_receivers = ['##########@vtext.com',
        'xxxxxxxx@company.com',
        'xxxxxxxx@gmail.com'
    ]
    text_message = """Subject: %s

    %s
    """ % (subject, text_message)

    smtpObj.sendmail(sender, text_receivers, text_message)

Приведенный выше код работает для отправки смс на мой телефон и мою рабочую электронную почту, но не на gmail.Я проверил и убедился, что электронное письмо не отображается в папке со спамом.Google, кажется, блокирует это полностью.Есть идеи?

Ответы [ 5 ]

0 голосов
/ 17 августа 2019

Я тоже сталкивался с такой же проблемой.Когда я проверил свою почту из веб-почты, я обнаружил, что электронная почта была отклонена.Screenshot Проблема была решена путем добавления заголовка «От» к электронному письму.

import smtplib, ssl
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

sender_email = "test@example.com"
receiver_email = "example@gmail.com"
password = "pass1234"
host = "example.com"
port = 465
message = MIMEMultipart("alternative")
message["Subject"] = "Email Subject"
message["From"] = sender_email
message["To"] = receiver_email
text = "This is the email Body"
message.attach(MIMEText(text, "plain"))
context = ssl.create_default_context()
with smtplib.SMTP_SSL(host, port, context=context) as server:
    server.login(sender_email, password)
    server.sendmail(
        sender_email, receiver_email, message.as_string()
    )
0 голосов
/ 31 мая 2018

Нашли решение.

import smtplib
from email.mime.text import MIMEText

sender = 'xxxx@company.com'
smtpObj = smtplib.SMTP('smtp.company.com')

def text_func ( subject,text_message ):
    text_receivers = ['##########@vtext.com',
        'xxxxxxxx@company.com',
        'xxxxxxxx@gmail.com'
    ]

    cont = '''\
       <html>
         <head></head>
         <body>
           <p>{0}</p>
         </body>
       </html>
       '''.format(text_message)

    msgTo = ""
    for person in text_receivers:
        msgTo += "{0} ".format(person)

    msg = MIMEText(cont, 'html')

    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = msgTo

    smtpObj.sendmail(sender, text_receivers, msg.as_string())
0 голосов
/ 30 мая 2018

Возможно, вам придется изменить настройки Gmail, чтобы в вашу учетную запись добавлялись менее безопасные приложения.См. Ссылку ниже от Ника, эксперта по учетным записям в Google.

https://support.google.com/accounts/answer/6010255?hl=en

Вариант 2. Измените настройки, чтобы обеспечить менее безопасные приложения для вашей учетной записи.Мы не рекомендуем эту опцию, потому что она может помочь кому-то взломать ваш аккаунт.Если вы все равно хотите разрешить доступ, выполните следующие действия. Перейдите в раздел «Меньше защищенных приложений» в своей учетной записи Google.Включите Разрешить менее безопасные приложения.Если вы не видите этот параметр, возможно, ваш администратор отключил менее безопасный доступ к учетной записи приложения.

0 голосов
/ 31 мая 2018

Шаг 1:

Разрешение менее защищенным приложениям получить доступ к вашей учетной записи

Для отправки электронного письма:

import smtplib

gmail_user = 'you@gmail.com'  
gmail_password = 'P@ssword!'

sent_from = gmail_user  
to = ['me@gmail.com', 'bill@gmail.com']  
subject = 'OMG Super Important Message'  
body = 'Hey, what's up?\n\n- You'

email_text = """\  
From: %s  
To: %s  
Subject: %s

%s
""" % (sent_from, ", ".join(to), subject, body)

try:  
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    server.sendmail(sent_from, to, email_text)
    server.close()

    print 'Email sent!'
except:  
    print 'Something went wrong...'
0 голосов
/ 30 мая 2018

Это может быть не правильно, так как у меня нет большого опыта работы с текстовой стороной smtplib, но похоже, что вам нужно установить соединение TLS.Я бы изменил ваш скрипт на следующий:

import smtplib

sender = 'xxxx@company.com'
smtpObj = smtplib.SMTP('smtp.company.com')
smtpObj.starttls()

def text_func ( subject,text_message ):
text_receivers = ['##########@vtext.com',
    'xxxxxxxx@company.com',
    'xxxxxxxx@gmail.com'
]
text_message = """Subject: %s

%s
""" % (subject, text_message)

smtpObj.sendmail(sender, text_receivers, text_message)
...