Прежде всего, я - по всем параметрам - новичок в Python и в навигации по тонкостям электронной почты с точки зрения программиста. Таким образом, если я опущу какую-либо важную информацию или неправильно использую терминологию, пожалуйста, не стесняйтесь просить меня уточнить!
Недавно я научился генерировать и отправлять электронную почту в Python 3.7 (на ОС Windows 10) без каких-либо проблем из моей домашней сети Интернет. Однако, когда я нахожусь в сети моей работы, я не могу правильно соединиться с Python для генерации и отправки электронной почты. Я покажу два различных метода, которые я попробовал ниже (оба из предыдущих тем форума), а также последующие сообщения об ошибках:
import smtplib
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("aaron.dadas.85", "mypassword")
server.sendmail(
"aaron.dadas.85@gmail.com",
"aaron.dadas.85@gmail.com",
"this message is from python")
server.quit()
Traceback (most recent call last):
File "C:\Users\320045759\Desktop\emailtest.py", line 3, in <module>
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 1031, in __init__
source_address)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 336, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 1037, in _get_socket
self.source_address)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\socket.py", line 727, in create_connection
raise err
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\socket.py", line 716, in create_connection
sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Это вторая попытка использования прокси-сервера для Интернета моей компании:
import smtplib
import socks
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, 'http://user:password@199.168.151.10:80', 8080)
socks.wrapmodule(smtplib)
smtpserver = 'smtp.gmail.com'
AUTHREQUIRED = 1
smtpuser = 'aaron.dadas.85'
smtppass = 'mypassword'
RECIPIENTS = 'aaron.dadas.85@gmail.com'
SENDER = 'aaron.dadas.85@gmail.com'
mssg = "test message"
s = mssg
server = smtplib.SMTP(smtpserver,587)
server.ehlo()
server.starttls()
server.ehlo()
server.login(smtpuser,smtppass)
server.set_debuglevel(1)
server.sendmail(SENDER, [RECIPIENTS], s)
server.quit()
Traceback (most recent call last):
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Scripts\socks.py", line 823, in connect
super(socksocket, self).connect(proxy_addr)
socket.gaierror: [Errno 11003] getaddrinfo failed
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\320045759\Desktop\emailtest.py", line 18, in <module>
server = smtplib.SMTP(smtpserver,587)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 336, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\smtplib.py", line 307, in _get_socket
self.source_address)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\socket.py", line 727, in create_connection
raise err
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Lib\socket.py", line 716, in create_connection
sock.connect(sa)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Scripts\socks.py", line 94, in wrapper
return function(*args, **kwargs)
File "C:\Users\320045759\Desktop\Softwares\Python\Python37\Scripts\socks.py", line 836, in connect
raise ProxyConnectionError(msg, error)
socks.ProxyConnectionError: Error connecting to SOCKS5 proxy http://user:password@199.168.151.10:80:8080: [Errno 11003] getaddrinfo failed
Я пытался перемещаться по другим потокам для решения, но многие из них разрешаются пользователем, отключившим свой брандмауэр (обычно в случаях, когда пользователь получил «[WinError 10061]. Невозможно установить соединение, так как целевой компьютер активно отказался "ошибка - я тоже сталкивался с этой ошибкой много раз в этом случае). Отключить брандмауэр я не могу; Я должен обойти брандмауэр компании, потому что я не уполномочен изменять эти настройки.
Правда, это может и не быть проблемой здесь. Мне кажется, что я просто неправильно обращаюсь с тем, как я должен использовать прокси-адрес моей сети. Важная подсказка в том, что когда я использую python -m pip install [package] из командной строки, он каждый раз завершается сбоем. ОДНАКО, когда я использую python -m pip --proxy http://user:password@199.168.151.10:80 install [package] , это работает. Если я правильно понимаю, это означает, что есть способ использовать прокси-адрес для доступа к онлайн-ресурсам ... Я просто неправильно использую прокси-адрес в случае генерации / отправки электронной почты.
Я надеюсь, что это введение предоставит достаточно подробностей, чтобы кто-нибудь мог помочь! Я буду активно следить за ответами, чтобы предоставить больше информации, если это необходимо. Спасибо!
РЕДАКТИРОВАТЬ 01/07/2019:
Используя следующий скрипт, я могу получить HTML-код, находясь в сети моей компании (используя настройки прокси-сервера):
import requests
proxies = {'http': 'http://user:password@199.168.151.10:80','https': 'http://user:password@199.168.151.10:80'}
r = requests.get('https://www.google.com/', proxies=proxies)
print(r.text)
[выводится HTML-код главной страницы Google]
Это шаг в правильном направлении, поскольку он демонстрирует успешное подключение к Интернету через этот прокси-адрес. И все же я все еще не могу собрать загадку вместе: что отсутствует или синтаксически неверно в моей предыдущей попытке? Я неправильно объявляю адрес прокси?