从Python脚本发送电子邮件,没有外发端口访问?

时间:2014-02-18 22:43:24

标签: python cron smtp bluehost

我被Bluehost殴打了。我做了类似to this的事情,除了smtp.gmail.com:587而不是IMAP。

从终端(本地运行)精彩地工作,但是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。

我被卡住了,有没有办法做到这一点?任何关于某些hacky的想法都是围绕Python没有发送电子邮件的,但是发出其他信息以发送电子邮件......?

Bluehost可以在cron作业完成时发送电子邮件 - 从Python传递变量的任何方式,以便它可以为我发送邮件吗?

2 个答案:

答案 0 :(得分:1)

Bluehost不允许脚本使用标准计划访问除80和443之外的其他端口。由于您的脚本尝试使用端口587,它根本不起作用。点击此处查看有关Bluehosts政策的更多详情:help page on Bluehost

一个建议是您使用另一个允许通过其他端口发送电子邮件的电子邮件服务,即HTTP。 mailgun是提供此服务的提供商。

答案 1 :(得分:0)

您可以使用BlueHost为您提供的smtp服务器:

#!/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 = 'yourEmailName@yourDomain.com'  
password = 'yourPassword'
toaddrs  = ['whoEver@gmail.com']

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()