Я вижу несколько проблем с этим кодом, которые вообще не должны работать на Python 2.x.
1) Вы нигде не определяете attach_file
, поэтому эта строка вызывает исключение:
if attach_file is not None and attach_file != '':
Вы имели в виду attach_pdf_file
? Изменение attach_file
на attach_pdf_file
исправляет это исключение.
2) Возможно, вы просто исключили его из примера кода, но вы вызываете функцию из os.path
, но вы никогда не import os
нигде в вашем скрипте. Добавление, которое исправляет это исключение.
Как только эти проблемы будут исправлены, запуск сценария в моей системе с адресом from
в качестве адреса gmail вызывает следующее исключение:
Traceback (most recent call last):
File "/home/ra/Desktop/stack-overflow.py", line 50, in <module>
"output.pdf")
File "/home/ra/Desktop/stack-overflow.py", line 44, in buildEmail
s = smtplib.SMTP('localhost')
File "/usr/lib/python2.7/smtplib.py", line 249, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py", line 309, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py", line 284, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.7/socket.py", line 571, in create_connection
raise err
error: [Errno 111] Connection refused
У меня нет SMTP-сервера, настроенного локально на этом компьютере, что объясняет, почему я получаю ошибку, которую я делаю. В вашем случае, если электронная почта отправляется должным образом, но только для некоторых поставщиков электронной почты, это может быть связано с тем, что поставщик электронной почты понимает, что, хотя адрес является Yahoo, SMTP-сервер не является и, таким образом, отказывается от Эл. адрес. Это всего лишь догадка, но это может объяснить это (если бы это было не так, любому было бы еще проще отправить электронное письмо «с» любого адреса).