2014-01-12 4 views
2
import smtplib 

sender = '[email protected]' 
receiver = ['[email protected]'] 

message = """From: From Person <[email protected]> 
To: To Person <[email protected]> 
Subject: SMTP e-mail test 

This is a test e-mail message. 
""" 

try: 

    print("trying host and port...") 

    smtpObj = smtplib.SMTP('smtp.gmail.com', 465) 

    print("sending mail...") 

    smtpObj.sendmail(sender, receiver, message) 

    print("Succesfully sent email") 

except SMTPException: 

    print("Error: unable to send email") 

Я создал две новые учетные записи электронной почты (выше), как на том же сервере (gmail), чтобы проверить это. Он достигает точки, в которой он печатает «пробующий хост и порт ...» и не идет дальше. Поэтому проблема должна заключаться в адресе и номере порта, который я ввел. Но в соответствии с данными сервера исходящей почты gmail я правильно их ввел. Какие-нибудь идеи, что не так?Нет отправки электронной почты с использованием smtplib - python

Если я удалю номер порта или попробую другой номер порта, например 587, у меня есть ошибка.

+0

Включить диагностику с 'smtplib' так что вы можете увидеть, где это происходит не так.. На этом уровне детализации все, что мы можем сделать, это догадываться. Мое предположение было бы в том, что Gmail требует аутентификации, и в этом случае можно увидеть любую из имперских crapload почти дубликатов. – tripleee

ответ

1

Sending email via Gmail's SMTP servers requires TLS и аутентификация. Для аутентификации вам необходимо будет make an application-specific password for your account.

Этот скрипт работал для меня (хотя я использовал свой собственный адрес электронной почты GMail и свой собственный пароль для конкретного приложения). В приведенном ниже коде замените APPLICATION_SPECIFIC_PASSWORD паролем, который вы создали.

import smtplib 

sender = '[email protected]' 
receiver = ['[email protected]'] 

message = """From: From Person <[email protected]> 
To: To Person <[email protected]> 
Subject: SMTP e-mail test 

This is a test e-mail message. 
""" 

try: 
    print("trying host and port...") 

    smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465) 
    smtpObj.login("[email protected]", "APPLICATION_SPECIFIC_PASSWORD") 

    print("sending mail...") 

    smtpObj.sendmail(sender, receiver, message) 

    print("Succesfully sent email") 

except smtplib.SMTPException: 
    print("Error: unable to send email") 
    import traceback 
    traceback.print_exc() 

(Для отладки проблемы, я добавил код печати обратного прослеживания в исключении заявления. Исключения имели конкретную информацию о том, как заставить его работать. Код висел при доступе к порту 465, я думаю, что из-за проблемы с TLS переговоров, так что я должен был попробовать использовать порт 587, а затем я получил хорошую информацию отладки, которая объяснила, что делать)

You can see info on the SMTP_SSL object here.

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