Отправка электронной почты через Python

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

Мой код:

#send email
import win32com.client
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "mysubject"
newMail.HTMLBody = "mybody"
newMail.To  = "[email protected]"
newMail.Send()

Моя ошибка:

newMail.Send()
File "<COMObject CreateItem>", line 2, in Send
pywintypes.com_error: (-2147467260, 'Operation aborted', None, None)

Я создал отдельный файл, чтобы получить больше информации об ошибке:

import win32api
e_msg = win32api.FormatMessage(-2147457260)
print e_msg.decode('CP1251')

Это дает сообщение:

pywintypes.error: (317, 'FormatMessage', 'The system cannot find message text for message number 0x%1 in message file for %2.')

Что это значит и что можно сделать, чтобы решить эту проблему?


person user2242044    schedule 07.11.2014    source источник
comment
Когда вы получаете эту ошибку, вы действительно используете "mybody" в качестве тела сообщения?   -  person wnnmaw    schedule 07.11.2014
comment
я буду использовать smtplib модуль   -  person Hackaholic    schedule 07.11.2014
comment
Да, mybody — это всего лишь строка-заполнитель для HTML-кода, который я сгенерирую позже.   -  person user2242044    schedule 07.11.2014
comment
Я не могу воспроизвести эту проблему, используя 2.7.6.   -  person wnnmaw    schedule 07.11.2014
comment
У меня есть один компьютер, на котором он работает нормально. Я не думаю, что это имеет значение, но у меня это не работает на виртуальной машине.   -  person user2242044    schedule 07.11.2014
comment
@user2242044 user2242044, вы должны включить такие детали в вопрос, они имеют значение   -  person wnnmaw    schedule 07.11.2014
comment
@wnnmaw только что обновил исходный вопрос. Спасибо!   -  person user2242044    schedule 07.11.2014
comment
Установлен ли Outlook на виртуальной машине?   -  person wnnmaw    schedule 07.11.2014
comment
да, он установлен. Я могу переключить `newMail.Send() `newMail.Display() `, и всплывает электронное письмо. Я также могу отправлять электронные письма вручную через Outlook.   -  person user2242044    schedule 07.11.2014
comment
Решил вопрос!! Похоже, что в Outlook есть некоторая защита для предотвращения автоматических электронных писем. Не уверен, как обойти это, но я знаю проблему.   -  person user2242044    schedule 07.11.2014
comment
@user2242044 user2242044 Не могли бы вы добавить реальный ответ на этот вопрос? Я видел ваш пост около 2 часов назад, но не стал читать все комментарии. Теперь я пришел к тому же выводу и хотел вернуться, чтобы оставить комментарий и прочитать ваш. Более заметный ответ может быть полезен для некоторых будущих поверхностных людей :).   -  person Matthias Arras    schedule 10.06.2020
comment
Можно поподробнее, как вы решили эту проблему? @user2242044   -  person GinTonic    schedule 10.07.2020