我试图创建一个简单的Python脚本时发送电子邮件。 我用这个下面的代码:
import subprocess
params = {'from': 'from@example.com',
'to': 'to@example.com',
'subject': 'Message subject'}
message = '''From: %(from)s
To: %(to)s
Subject: %(subject)s
Message body
''' % params
sendmail = subprocess.Popen(['/usr/share/sendmail', params['to']])
sendmail.communicate(message)
但我recive当我尝试运行它下面的错误信息:
Traceback (most recent call last):
File "/home/me/test.py", line 15, in <module>
sendmail = subprocess.Popen(['/usr/share/sendmail', params['to']])
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 13] Permission denied
任何人都知道解决这个问题,或者一个更好的代码?
谢谢!
在/ usr /共享/ sendmail的是非常不寻常的 - 你确定你的sendmail程序实际上是在那里? 通常它是在/usr/sbin/sendmail
。
我宁愿使用标准库smptlib而不是调用的sendmail的直接,如果我是你。
您可以使用它像这样发送消息:
server = smtplib.SMTP('smtp.example.com')
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
而不是调用特定的过程中,你可以,如果你的邮件被配置为直接使用专用的邮件库:
import smtplib
from email.mime.text import MIMEText
fp = open(textfile, 'rb')
# Create a text/plain message
msg = MIMEText(fp.read())
fp.close()
# Format headers
msg['Subject'] = 'My subject'
msg['From'] = 'from@from.fr'
msg['To'] = 'to@to.com'
# Send the message via Michelin SMTP server, but don't include the envelope header.
s = smtplib.SMTP('your mail server')
s.sendmail('from@from.fr', ['to@to.com'], msg.as_string())
s.quit()
您有更多的蟒蛇电子邮件的例子在doc。
下面是使用发送的smtplib邮件一些代码,并可以做TLS / SSL
import smtplib
from email.MIMEText import MIMEText
from email.utils import parseaddr
class Mailer(object):
def __init__(self, fromAddress, toAddress, password):
self.fromAddress = parseaddr(fromAddress)[1]
self.toAddress = parseaddr(toAddress)[1]
self.password = password
def send(self, subject, body):
msg = MIMEText(body)
msg["From"] = self.fromAddress
msg["Reply-to"] = self.toAddress
msg["To"] = self.toAddress
msg["Subject"] = subject
sender = msg["From"]
recipient = msg["To"]
messageText = "".join(str(msg))
mxhost = self.lookup(sender) # lookup finds the host that you want to send to
server = smtplib.SMTP(mxhost, 587) #port 465 or 587
server.ehlo()
server.starttls()
server.ehlo()
server.login(sender, self.password)
server.sendmail(sender, recipient, messageText)
server.close()
这是我的代码发送电子邮件。
#coding: utf-8
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
def send_mail(to_list,sub,content):
mail_host="smtp.example.com"
mail_user="nvi"
mail_pass="password"
mail_postfix="example.com"
me=mail_user + '555' +"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, _subtype='plain', _charset='utf-8')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = to_list
msg['Date'] = formatdate(localtime=True)
msg['Bcc'] = '123@example.com'
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close()
return True
except Exception, e:
print e
return False
if __name__ == "__main__":
send_mail('my_email_address', 'subject', 'content')
我的计划与Gmail,您可以尝试玩它做别的事情。 您还可以发送短信。 我在下面附上我的代码。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
Type = input("Enter 1 for eMail, 2 for SMS: ")
toaddr = 0
if Type=='1':
toaddr = input("Enter to address: ")
else:
Provider = input("1 for Sprint, 2 for AT&T, and 3 for Verizon: ")
Mobile = input("Enter the mobile number: ")
if Provider=='1':
toaddr = str(Mobile) + "@messaging.sprintpcs.com"
if Provider=='2':
toaddr = str(Mobile) + '@txt.att.net'
if Provider=='3':
toaddr = str(Mobile) + ''
print (toaddr)
head = input("Enter your subject: ")
body = input("Enter your message: ")
fromaddr = input("Enter the 'From Address'(example@gmail.com): ")
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = head
password = input("Enter the from address password: ")
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, password)
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
我希望这有帮助。