Отправить электронное письмо из скрипта Python без исходящего доступа к порту?

Я был избит Bluehost. Я делаю что-то подобное этому, за исключением smtp.gmail.com:587 вместо ИМАП.

Прекрасно работает с терминала (работает локально), но я хотел автоматизировать его как задание cron. Сегодня вечером это не удалось, поэтому я попытался через SSH, в котором я обнаружил вышеуказанную проблему - socket.error: [Errno 101] Network is unreachable.

У меня есть план общего хостинга, но Bluehost говорит, что даже с выделенным IP-адресом они могут открыты только порты >=1024.

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

Bluehost может отправить электронное письмо, когда задание cron завершится - любой способ передать ему переменную из Python, чтобы он мог сделать рассылку для меня?


person OJFord    schedule 18.02.2014    source источник
comment
Это действительно вопрос о том, какие услуги предоставляет bluehost, а не о Python или чем-то еще.   -  person abarnert    schedule 19.02.2014
comment
Кроме того, похоже, что они запускают локальный exim сервер на вашем компьютере для передачи почты. Есть ли причина, по которой вы не можете отправлять через локальный сервер, а вместо этого вам нужно напрямую общаться с gmail?   -  person abarnert    schedule 19.02.2014
comment
Что ж, вопрос в том, есть ли обходной путь Python/другой из-за этой проблемы с сервисом. Извините, я не знаю, что такое exim-сервер. Gmail — это адрес отправления.   -  person OJFord    schedule 19.02.2014
comment
Python никак не может позволить вам общаться с портом, с которым вам не разрешено разговаривать. Или любой другой язык. Поэтому вам нужно найти другой способ отправки электронной почты. Будь то использование почтового сервера, установленного на хосте, использование другого стороннего хоста, который может прослушивать IP-адрес выше 1024, использование некоторого пользовательского почтового API, который они предоставляют, …   -  person abarnert    schedule 19.02.2014
comment
Или… разве Gmail не предоставляет API веб-сервиса, который можно использовать вместо SMTP?   -  person abarnert    schedule 19.02.2014
comment
Я знаю, что нельзя. какой-то другой способ - это именно то, о чем я просил: есть идеи для какой-то хакерской работы, когда Python не отправляет электронное письмо, а сигнализирует что-то еще об отправке электронного письма..?   -  person OJFord    schedule 19.02.2014
comment
Но это что-то еще, о чем он сигнализирует, не будет специфичным для Python, это будет что-то, предоставленное Bluehost или сторонним поставщиком, который вам нужно будет выбрать. Если вы найдете хорошую возможность и хотите знать, как поговорить с ней из Python, это будет хорошим вопросом SO. Просить кого-то другого выбрать услугу для вас (будь то покупка сторонних решений или обращение в Bluehost, чтобы узнать, что они могут вам предоставить) — не очень хороший вопрос.   -  person abarnert    schedule 19.02.2014
comment
У меня есть переменная Python для отправки по электронной почте. Я не могу использовать исходящие порты. Как передать эту переменную в возможное электронное письмо, было моим вопросом - я понятия не имел, просил любое предложение, а не личного покупателя. Ответ HAL идеален, я соглашусь, как только заработаю.   -  person OJFord    schedule 19.02.2014
comment
См. помощь: вопросы с просьбой порекомендовать или найти инструмент, библиотеку или любимый сторонний ресурс не относятся к теме для Переполнение стека. Возможно, вам повезет, и вы получите ответ, который сработает до того, как ваш вопрос будет закрыт, но полагаться на это — не лучший способ использования сайта.   -  person abarnert    schedule 19.02.2014
comment
Я ценю это, но вы должны понимать, что делаете предположения об ответе, говоря это. Я не просил инструмент/библиотеку/программу. Ответ @HAL сформулирован плохо, но использование другого почтового провайдера, поддерживающего отправку через HTTP, не является инструментом и т. Д. Это метод решения моей проблемы. Далее он услужливо приводит пример, но в этом нет необходимости.   -  person OJFord    schedule 19.02.2014


Ответы (2)


Bluehost не разрешает скриптам доступ к другим портам, кроме 80 и 443, со стандартным планом. Поскольку ваш скрипт пытается использовать порт 587, он просто не будет работать. Подробнее о политике Bluehosts читайте здесь: страница справки на Bluehost

Одним из предложений было бы использовать другую службу электронной почты, которая позволяет отправлять электронные письма через другой порт, например HTTP. mailgun — один из поставщиков, предлагающих эту услугу.

person HAL    schedule 18.02.2014
comment
Я связал соответствующую страницу справки в своем OP, я знаю, что они этого не разрешают, я прошу другой метод. Я не отправляю почтовое сообщение — скрипт Python выполняет некоторые вычисления, а затем отправляет электронное письмо, содержащее результирующую переменную. - person OJFord; 19.02.2014
comment
Хорошо, я не был уверен, что вы читали, что порт был заблокирован. Предполагалось, что ваш скрипт Python может отправлять электронные письма через другую службу. - person HAL; 19.02.2014
comment
Я посмотрел на mailgun, но их SMTP-сервер слушает 25, 587 и 465. Так что это тоже нехорошо. На самом деле, разве эти порты не всегда одинаковы для SMTP? - person OJFord; 19.02.2014
comment
При отправке писем через mailgun вы можете использовать HTTP (порт 80/443) или SMTP. В вашем случае вам нужно будет использовать HTTP. - person HAL; 19.02.2014
comment
О, это круто, я сейчас посмотрю. - person OJFord; 19.02.2014
comment
Я принял ваш ответ, так как уверен, что смогу заставить его работать (ожидая распространения обновления на записи CNAME atm..) - хотя я не могу проголосовать, если вы не внесете изменения. Я предлагаю, чтобы это редактирование сделало ответ более ясным, что мне следует искать почтового провайдера, который разрешает HTTP вместо/а также SMTP, поскольку это было неясно до комментариев. Спасибо еще раз. - person OJFord; 19.02.2014
comment
Спасибо, я обновил ответ с вашими предложениями. Надеюсь, у вас получится! - person HAL; 19.02.2014

Вы можете использовать smtp-сервер, который вам предоставляет BlueHost:

#!/usr/bin/env python
# email functions
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
import smtplib  
from email.Utils import COMMASPACE, formatdate

lines = ''
lines =  r'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'
lines += r'<html xmlns="http://www.w3.org/1999/xhtml">'
lines += r'<h1>Hi!'

yourSmtp = 'mail.yourDomain.com'
fromaddr = '[email protected]'  
password = 'yourPassword'
toaddrs  = ['[email protected]']

msg = MIMEMultipart('alternative')
msg['Subject'] = 'Hi'
msg['From'] = fromaddr
msg['Date'] = formatdate(localtime=True)
# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText("text", 'plain')
part2 = MIMEText(lines, 'html')

# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)

server = smtplib.SMTP(yourSmtp,26)
server.set_debuglevel(0)
server.ehlo(yourSmtp)
server.starttls()
server.ehlo(yourSmtp)
server.login(fromaddr,password)
for toadd in toaddrs:
   msg['To'] = toadd
   server.sendmail(fromaddr, toadd, msg.as_string())  
server.quit()
person user3368505    schedule 28.07.2016