2015-05-30 7 views
6

Я пытаюсь отправить простую почту с питономКак отправить почту с Python

import smtplib 

server = smtplib.SMTP('smtp.gmail.com', 587) 
server.ehlo() 
server.starttls() 
server.login("[email protected]", "mypassword") 

msg = "Hello world" 
server.sendmail("[email protected]", "[email protected]", msg) 
server.quit() 

Но я получаю этот ERR:

server.login("[email protected]", "psw") 

File "C:\Python\lib\smtplib.py", line 652, in login 

raise SMTPAuthenticationError(code, resp) 

smtplib.SMTPAuthenticationError: (534, b'5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuxb\n5.7.14 4i2u8qU8V3jgf6uGv8da1RAGPJyctRvIFy_kjai6aKVx_B6qVhoz_dzFpvfPC18H-jeM6K\n5.7.14 cnm2HVuq-wr-uw59hD31ms-cxMmnZuq6Z3_liDaDmu8_UqaiUwR4FUiuX2i5pPdQjJzFvv\n5.7.14 4VrEF5XT4ol2iN17gnB_jITpwzsjH9Ox3NCNcfl7SriHr5m7esc15PWI0CG_2CTlyh7RxW\n5.7.14 XhoJPajs8GMd-khOQWUqucywfrfo> Please log in via your web browser and\n5.7.14 then try again.\n5.7.14 Learn more at\n5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 ef10sm13614207wjd.49 - gsmtp') 

Что я должен делать?

Благодаря

+0

Вы пробовали войти в систему, используя свой браузер, и повторите попытку, как говорится в сообщении об ошибке? Вы протестировали схему входа в свой терминал? – ForceBru

+0

Ваша учетная запись Gmail имеет активную проверку на 2 шага ??? – Hackaholic

+0

@ForceBru, Да, я пробовал войти в систему через браузер, и пока я вошел в систему, чтобы попробовать это - он не работает. Я также пробовал те же строки через терминал, а также не могу этого сделать. – Yura

ответ

7

Кажется, если вам требуется что-то, что Google называет пароль приложения.

В принципе, вы создаете 16-значный пароль, который уникален для вашего приложения. Этот пароль вводится в программе python вместо пароля, который вы регулярно используете для входа в свою учетную запись Google.

Это позволяет вам по-прежнему пользоваться преимуществами двухэтапной аутентификации, а также использовать сторонние приложения, такие как ваша собственная программа python.

Вот инструкции от Google о том, как создать такой пароль приложения: https://support.google.com/accounts/answer/185833?hl=en

+0

Большое спасибо за подробное объяснение и ответ. Это сработало! – Yura

3

вы можете использовать этот код:

import smtplib 

session = smtplib.SMTP('smtp.gmail.com', 587) 
session.ehlo() 
session.starttls() 
session.login('[email protected]',' password') 
headers = "\r\n".join(["from: " + '[email protected]', 
         "subject: " + "test", 
         "to: " + '[email protected]', 
         "mime-version: 1.0", 
         "content-type: text/html"]) 

# body_of_email can be plaintext or html!      
content = headers + "\r\n\r\n" + "body_of_email" 
session.sendmail('[email protected]', '[email protected]', content) 

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

+0

Спасибо! Я уже нашел ответ выше. :) – Yura

+0

@SaraSantana Пожалуйста, посмотрите на [yagmail] (https://github.com/kootenpv/yagmail), он должен очень легко отправлять электронные письма! – PascalVKooten

2

Вы можете использовать бесплатный почтовый API, такие как mailgun:

import requests 

def send_simple_message(target): 
    return requests.post(
     "https://api.mailgun.net/v3/samples.mailgun.org/messages", 
     auth=("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0"), 
     data={"from": "Excited User <[email protected]>", 
       "to": [target], 
       "subject": "Hello", 
       "text": "Testing some Mailgun awesomeness!"}) 

send_simple_message('[email protected]') 

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

Смотрите также: This question для получения информации об использовании smtplib

+0

Спасибо! Я уже нашел ответ выше. :) – Yura

+0

@Yura. Ага. Я все еще думаю, что добавление альтернативных решений улучшает качество вопроса для будущих читателей. Рад, что ты получил свой ответ! –

1

Yea, как отправил ответ, это был вопрос аутентификации :)

Я хотел бы, чтобы в дальнейшем помочь вам с отправкой писем по консультирование пакета yagmail (я сторонник, извините за рекламу, но я чувствую, что это может действительно помочь!). Обратите внимание, что я также поддерживаю список распространенных ошибок, таких как ошибка аутентификации.

Весь код для вас будет:

import yagmail 
yag = yagmail.SMTP('user', 'pw') 
yag.send(contents = msg) 

Обратите внимание, что я обеспечиваю по умолчанию для всех аргументов, например, если вы хотите отправить себя, вы можете опустить «to = [email protected]», если вы не делаете хотите тему, вы можете ее опустить.

Кроме того, цель заключается в том, чтобы сделать его очень легким для присоединения html-кода или изображений (и других файлов).

Где вы положили содержимое вы можете сделать что-то вроде:

contents = ['Body text, and here is an embedded image:', 'http://somedomain/image.png', 
      'You can also find an audio file attached.', '/local/path/song.mp3'] 

Ого, как легко отправлять вложения!Это займет 20 строк без yagmail;)

Кроме того, если вы установите его один раз, вам больше не придется вводить пароль (и надежно хранить его). В вашем случае вы можете сделать что-то вроде:

import yagmail 
yagmail.SMTP().send(contents = contents) 

, который является гораздо более кратким!

Я бы пригласил вас посмотреть на github или установить его непосредственно с помощью pip install yagmail.

Смежные вопросы