Отправка электронной почты через Python с использованием прокси (невозможно отключить брандмауэр) - PullRequest
0 голосов
/ 07 января 2019

Прежде всего, я - по всем параметрам - новичок в 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]

Это шаг в правильном направлении, поскольку он демонстрирует успешное подключение к Интернету через этот прокси-адрес. И все же я все еще не могу собрать загадку вместе: что отсутствует или синтаксически неверно в моей предыдущей попытке? Я неправильно объявляю адрес прокси?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...