2014-02-18 5 views
0

Я был избит Bluehost. Я делаю что-то подобное to this, за исключением smtp.gmail.com:587 вместо IMAP.Отправлять письмо от скрипта Python без доступа к исходящему порту?

Работает прекрасно с терминала (работает локально), но I wanted to automate it as a cron job. Сегодня он потерпел неудачу, поэтому я пробовал через SSH, и я нашел вышеуказанную проблему - socket.error: [Errno 101] Network is unreachable.

У меня есть общий хостинг, но Bluehost say that even with a dedicated IP они могут открывать только порты> = 1024.

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

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

+0

Это действительно вопрос о том, какие услуги BlueHost предоставляет, а не о Python или что-нибудь еще. – abarnert

+0

Кроме того, похоже, что они запускают локальный 'exim' сервер на вашем компьютере для передачи почты. Есть ли причина, по которой вы не можете отправить через локальный сервер, и вместо этого нужно напрямую поговорить с gmail? – abarnert

+0

Ну, вопрос в том, «существует ли Python/другая работа из-за этой проблемы с сервисом». Извините, я не знаю, что такое exim-сервер. Gmail - это отправленный адрес. – OJFord

ответ

1

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

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

+0

Я связал соответствующую страницу справки в своем OP, я знаю, что они не позволяют это, я прошу другого метода. Я не отправляю почтовый снимок - скрипт Python выполняет некоторые вычисления, а затем отправляет электронное письмо, содержащее результирующую переменную. – OJFord

+0

Хорошо, я не был уверен, что вы прочитали, что порт заблокирован. Было высказано предположение, что ваш скрипт Python может отправлять электронные письма через другую службу. – HAL

+0

Я смотрел на mailgun, но их SMTP-сервер слушает 25, 587 и 465. Так что это тоже не хорошо. На самом деле, эти порты не всегда одинаковы для SMTP? – OJFord

0

Вы можете использовать сервер 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() 
Смежные вопросы