Отказ послать электронное письмо с примером Python

22
задан Tim Post 1 September 2011 в 06:16
поделиться

7 ответов

Следующий код работает на меня:

import smtplib

FROMADDR = "my.real.address@gmail.com"
LOGIN    = FROMADDR
PASSWORD = "my.real.password"
TOADDRS  = ["my.real.address@gmail.com"]
SUBJECT  = "Test"

msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
       % (FROMADDR, ", ".join(TOADDRS), SUBJECT) )
msg += "some text\r\n"

server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, TOADDRS, msg)
server.quit()

я использую Редактирование Python 2.5.2.

: измененный порт от 25 до 587, как предложено О¤О–О©О¤О–О™ОџОҐ, и отбросил второй ehlo (). Теперь я хотел бы знать, почему порт 25 работ отлично от моей машины (и порт 465 делает не ).

28
ответ дан Federico A. Ramponi 29 November 2019 в 04:09
поделиться

Корректный способ соединиться с Gmail с помощью SSL:

server = smtplib.SMTP('smtp.gmail.com', 587)

Порт 465, кажется, вызывает задержки. Оба порта определяются в GMail FAQ.

Примечание, что использование порта 587 более характерно для SMTP по SSL, хотя это - просто тривиальная информация, она не имеет никакого другого практического применения.

Этот ответ предоставлен как сообщество Wiki, чтобы быть выбранным в качестве ответа. Улучшитесь по мере необходимости.

7
ответ дан tzot 29 November 2019 в 04:09
поделиться

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


import smtplib
import email
import os

username = "user@gmail.com"
passwd = "password"

def mail(to, subject, text, attach):
   msg = MIMEMultipart()

   msg['From'] = username
   msg['To'] = to
   msg['Subject'] = subject

   msg.attach(MIMEText(text)) 

   part = MIMEBase('application', 'octet-stream')
   part.set_payload(open(attach, 'rb').read())
   Encoders.encode_base64(part)
   part.add_header('Content-Disposition',
           'attachment; filename="%s"' % os.path.basename(attach))
   msg.attach(part)

   server = smtplib.SMTP("smtp.gmail.com", 495)
   server.ehlo()
   server.starttls()
   server.ehlo()
   server.login(username, passwd)
   server.sendmail(username, to, msg.as_string())
   server.close()

mail("you", "hi", "hi", "webcam.jpg")

Это - мое предположение, что большинство людей на этом потоке, которые имели успешные попытки с их кодом, не находится на win32.;)

*edit: См. http://docs.python.org/library/email-examples.html для некоторых хороших "официальных" примеров.

6
ответ дан ジョージ 29 November 2019 в 04:09
поделиться

Необходимо проверить порт, я не уверен, что порт SMTP Google равняется 65, который объяснил бы тайм-аут.

Изменяют Ваши источники как таковые:

smtplib. SMTP_SSL ('smtp.google.com', 465)

, Если, однако, Вы уверены, что он должен работать, и он не делает, кажется, что существуют некоторые проблемы с smtplib. SMTP_SSL, и существует доступный патч для него здесь .

1
ответ дан EndUsr 29 November 2019 в 04:09
поделиться

Неправильный порт, возможно? Я использую 587 для smtp.gmail.com , и это работает.

1
ответ дан Abgan 29 November 2019 в 04:09
поделиться

Хорошо, узнанный, который добивается цели эта строка кода!

сервер = smtplib. SMTP ('smtp.gmail.com', 587)

Оказался Gmail, не поддерживал SSL на порте 25 (и порт 465 вызвал подвешивание по некоторым причинам).

парни Спасибо!

2
ответ дан Chatter 29 November 2019 в 04:09
поделиться

Проблема связана с ошибкой в ​​Python . Попытка создать соединение с SMTP_SSL завершится неудачей с "SMTPServerDisconnected: сначала запустите connect ()"

Исправление было зафиксировано, поэтому вы можете исправить свою локальную копию. См. Вложение "smtplib_72551.diff".

(Примечание:

6
ответ дан 29 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: