Как отправить электронное письмо от python НЕ используя gmail? - PullRequest
3 голосов
/ 01 апреля 2020

У меня уже есть код для отправки электронной почты с python:

def send_email_gmail(subject, message, destination):
    """ Send an e-mail using gmail with message to destination email.

    Arguments:
        message {str} -- message string to send.
        destination {str} -- destination email (as string)
    """
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    # not a real email account nor password, its all ok!
    server.login('me123@gmail.com', 'fakepassword111!!!')

    # craft message
    msg = EmailMessage()

    message = f'{message}\n'
    msg.set_content(message)
    msg['Subject'] = subject
    msg['From'] = 'me123@gmail.com'
    msg['To'] = destination
    # send msg
    server.send_message(msg)

, и я прочитал несколько вопросов ( Учетные данные для входа не работают с Gmail SMTP или SMTPAuthenticationError при отправке почты с использованием gmail и python) для решения распространенной ошибки:

smtplib.SMTPAuthenticationError: (534, b'5.7.14 <https://accounts.google.com/signin/continue?sadfdgjsfgrp=1&dsfgscc=1dsdfgsfg&pldsfgt=AKsdfsdfggsdfggnsbu\n5.7.14 G0crCr0qSvWTng9xRE_pd3WnK3S2sDMsdfgsdfgX0J-xoetn7aHyFQi2qYrQisdfgsdfgKIwMCcgD7zLB1t7Z\n5.7.14 -OjHjpJqasdftBuTi9wh0sYlNW637SmPLuMnnLGn_WcZX5TGH4sddsfgXYar-Aasdfw0ctWfLhasdffPQV>\n5.7.14 Please log in via your web browser and then try again.\n5.7.14  Learn more at\n5.7.14  https://support.google.com/mail/answer/787521345364524 n21sm17577sadfdsf46qtn.17 - gsmtp')

В любом случае, я сделал то, что предлагают эти ответы, но я все еще получаю ошибку. Поэтому я решил Я больше не хочу использовать gmail для этого . Я отправляю электронную почту с поддельной учетной записи только для отправки электронных писем, поэтому для меня это не имеет значения для безопасности.

Итак, как изменить приведенный выше код, чтобы он работал для другой более надежной службы электронной почты? для отправки писем в python / code?

Идея ответа будет содержаться автономно и содержать пример сценария, который работает.


Edit1:

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

Turn off less secure app access
Your account is vulnerable to malicious activity because you’re allowing apps & devices that use less secure sign-in technology to access your account. You should turn off this type of access. Google will automatically turn this setting OFF if it’s not being used. Learn more

также есть желтый восклицательный знак, предупреждающий меня.


Edit2

Вывод EmailMessage():


это как предложено, я вставляю это (пустое сообщение).

Ответы [ 5 ]

1 голос
/ 10 апреля 2020

Для меня это работает, как ожидалось, когда я вхожу с использованием SSL, например:

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


def send_email_gmail(subject, message, destination):
    # First assemble the message
    msg = MIMEText(message, 'plain')
    msg['Subject'] = subject

    # Login and send the message
    port = 465
    my_mail = 'me123@gmail.com'
    my_password = 'fakepassword111!!!'
    context = ssl.create_default_context() 
    with smtplib.SMTP_SSL('smtp.gmail.com', port, context=context) as server:
        server.login(my_mail, my_password)
        server.sendmail(my_mail, destination, msg.as_string())


send_email_gmail('Test subject', 'This is the message', 'to_email@email.com')

РЕДАКТИРОВАТЬ:

Однако, если вы действительно хотите использовать другой SMTP-сервер, вы можете использовать перспективы например. Я получил это для работы без SSL, подключившись к smtp-mail.outlook.com через порт 587, например так:

def send_email_gmail(subject, message, destination):
    # First assemble the message
    msg = MIMEText(message, 'plain')
    msg['Subject'] = subject

    # Login and send the message
    port = 587
    my_mail = 'my_mail@hotmail.com'
    my_password = 'my_password'
    with smtplib.SMTP('smtp-mail.outlook.com', port) as server:
        server.starttls()
        server.login(my_mail, my_password)
        server.sendmail(my_mail, destination, msg.as_string())

send_email_gmail('Test', 'Bericht', 'm.drillenburg@gmail.com')
1 голос
/ 10 апреля 2020

У меня есть функция, которую я использую для отправки писем через Yahoo. Вам тоже ничего не нужно pip install.

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


def send_email(subject, to_email, message):
    password = "some_password"  # needs to be changed
    my_email = "some_email@yahoo.com"  # needs to be changed
    smtp_obj = smtplib.SMTP('smtp.mail.yahoo.com', 587)
    smtp_obj.starttls()
    smtp_obj.ehlo()
    smtp_obj.login(my_email, password)
    msg = MIMEMultipart()
    msg['From'] = my_email
    msg['To'] = to_email
    msg['Subject'] = subject
    msg.attach(MIMEText(message, 'plain'))
    smtp_obj.sendmail(msg['From'], msg['To'], msg.as_string())
    smtp_obj.quit()


if __name__ == '__main__':
    send_email('Subject: Automated e-mail', 'my_test_email@test.com', 'This was sent via script')

Это, очевидно, самый базовый c формат для электронного письма, в котором нет ничего, кроме темы и текста, но вы можете сделать гораздо больше. делать. Если вы хотите получить более подробную информацию, прочитайте документацию email и smtplib из стандартной библиотеки.

1 голос
/ 02 апреля 2020

Я нашел самый надежный способ подключения к SMTP-серверу Google - через пароль приложения.


Как получить пароль приложения

  1. go to управлять моей учетной записью Google
  2. В разделе "Вход в Google" убедитесь, что для учетной записи "Двухэтапное подтверждение" установлено значение "Вкл." *
  3. Также в разделе "Вход в Google "Выберите" Пароли приложений ".
  4. Выберите приложение как" Почта ", а устройство как" Другое (Пользовательское имя) "и назовите его.
  5. Скопируйте пароль приложения, оно будет в желтом поле и выглядит так: «XXXX XXXX XXXX XXXX»

Использование пароля приложения в вашем коде

import smtplib
from email.message import EmailMessage

def send_email_gmail(subject, message, destination):
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    #This is where you would replace your password with the app password
    server.login('account@gmail.com', 'App_Password')

    msg = EmailMessage()

    message = f'{message}\n'
    msg.set_content(message)
    msg['Subject'] = subject
    msg['From'] = 'me123@gmail.com'
    msg['To'] = destination
    server.send_message(msg)

send_email_gmail('Test subject', 'This is the message', 'to_email@email.com')

Надеюсь, это поможет!

0 голосов
/ 08 апреля 2020

Если вам просто нужен другой адрес электронной почты, найдите SMTP вашего нового почтового сервера.

server = smtplib.SMTP('smtp.newemail.com', port)
# replace the url and port with your new server's smtp.

Остальное должно быть таким же

0 голосов
/ 05 апреля 2020

Совет переключиться на другого провайдера, если вы не удовлетворены услугой, предоставляемой gmail, неполон без изучения других вариантов.

Вы можете отправить сообщение непосредственно на сервер электронной почты назначения через порт TCP 25 SMTP-сервер должен принимать сообщение для «собственного» домена от любого клиента без какой-либо авторизации. Здесь нет проблем с учетными данными.

Адрес этого сервера можно получить из DNS, просмотрев записи MX (MX означает почтовый обменник) для почтового домена получателя. Обычно их несколько. Хосты MX имеют предпочтения (наименьшее число = наивысшее предпочтение), и для достижения наилучших результатов с ними следует связываться в порядке от наивысшего предпочтения до наименьшего, пока не будет принято письмо. повторных попыток, если первая попытка не удалась - для этой цели обычно используется очередь почты. Некоторые сайты используют «graylisting», где первая попытка завершится неудачей в качестве меры защиты от спама.

Все это становится менее триальным, когда в сообщении несколько получателей, и такая программа становится крошечным подмножеством реального SMTP-сервера. , Возможно, вы даже захотите установить реальный сервер, такой как Linux "postfix", и настроить его только для отправки, есть доступные учебники. Просто знайте, что существует множество вариантов конфигурации.

...