经过多次搜索后,我无法找到如何使用smtplib.sendmail发送给多个收件人.问题是每次发送邮件时邮件标题似乎包含多个地址,但事实上只有第一个收件人才会收到电子邮件.
问题似乎是email.Message
模块期望与smtplib.sendmail()
函数不同的东西.
简而言之,要发送给多个收件人,您应将标头设置为逗号分隔的电子邮件地址字符串.但该sendmail()
参数to_addrs
应该是电子邮件地址列表.
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import smtplib
msg = MIMEMultipart()
msg["Subject"] = "Example"
msg["From"] = "me@example.com"
msg["To"] = "malcom@example.com,reynolds@example.com,firefly@example.com"
msg["Cc"] = "serenity@example.com,inara@example.com"
body = MIMEText("example email body")
msg.attach(body)
smtp = smtplib.SMTP("mailhost.example.com", 25)
smtp.sendmail(msg["From"], msg["To"].split(",") + msg["Cc"].split(","), msg.as_string())
smtp.quit()
Run Code Online (Sandbox Code Playgroud) 此代码可以正常工作并向我发送电子邮件:
import smtplib
#SERVER = "localhost"
FROM = 'monty@python.com'
TO = ["jon@mycompany.com"] # must be a list
SUBJECT = "Hello!"
TEXT = "This message was sent with Python's smtplib."
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP('myserver')
server.sendmail(FROM, TO, message)
server.quit()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将其包装在这样的函数中:
def sendMail(FROM,TO,SUBJECT,TEXT,SERVER):
import smtplib
"""this is some test documentation in the function"""
message = """\
From: %s
To: …
Run Code Online (Sandbox Code Playgroud) 当我尝试使用gmail发送邮件并发生python错误时,此类问题已经存在于此站点中,但对我没有帮助
gmail_user = "me@gmail.com"
gmail_pwd = "password"
TO = 'friend@gmail.com'
SUBJECT = "Testing sending using gmail"
TEXT = "Testing sending mail using gmail servers"
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(gmail_user, gmail_pwd)
BODY = '\r\n'.join(['To: %s' % TO,
'From: %s' % gmail_user,
'Subject: %s' % SUBJECT,
'', TEXT])
server.sendmail(gmail_user, [TO], BODY)
print ('email sent')
Run Code Online (Sandbox Code Playgroud)
错误:
server.login(gmail_user, gmail_pwd)
File "/usr/lib/python3.4/smtplib.py", line 639, in login
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (534, b'5.7.14
<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtl1\n5.7.14 Li2yir27TqbRfvc02CzPqZoCqope_OQbulDzFqL-msIfsxObCTQ7TpWnbxIoAaQoPuL9ge\n5.7.14 BUgbiOqhTEPqJfb02d_L6rrdduHSxv26s_Ztg_JYYavkrqgs85IT1xZYwtbWIRE8OIvQKf\n5.7.14 xxtT7ENlZTS0Xyqnc1u4_MOrBVW8pgyNyeEgKKnKNyxce76JrsdnE1JgSQzr3pr47bL-kC\n5.7.14 XifnWXg> Please log in via your web …
Run Code Online (Sandbox Code Playgroud) 我成功地使用smtplib模块发送电子邮件.但是,当发送emial时,它不包括发送的电子邮件中的主题.
import smtplib
SERVER = <localhost>
FROM = <from-address>
TO = [<to-addres>]
SUBJECT = "Hello!"
message = "Test"
TEXT = "This message was sent with Python's smtplib."
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Run Code Online (Sandbox Code Playgroud)
如何编写"server.sendmail"以在发送的电子邮件中包含SUBJECT.
如果我使用server.sendmail(FROM,TO,message,SUBJECT),则会出现关于"smtplib.SMTPSenderRefused"的错误
我一直试图让我的应用程序将一些输出的文本邮寄到电子邮件中.为了简化,我已经分离了脚本:
import smtplib
import sys
import os
SERVER = "localhost"
FROM = os.getlogin()
TO = [raw_input("To : ")]
SUBJECT = "Message From " + os.getlogin()
print "Message : (End with ^D)"
TEXT = ''
while 1:
line = sys.stdin.readline()
if not line:
break
TEXT = TEXT + line
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit() …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用 python 发送电子邮件,但它一直说ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)
. 这是我的代码:
server = smtplib.SMTP_SSL('smtp.mail.com', 587)
server.login("something0@mail.com", "password")
server.sendmail(
"something0@mail.com",
"something@mail.com",
"email text")
server.quit()
Run Code Online (Sandbox Code Playgroud)
你知道有什么问题吗?
我正在使用Python电子邮件和smtplib从Python发送电子邮件.我是通过Gmail SMTP服务器使用我的Gmail凭据执行此操作的.这工作正常,但是我想指定一个与Reply-to
地址不同的电子邮件from
地址,以便回复转到单独的地址(非Gmail).
我试过reply to
像这样创建一个参数:
msg = MIMEMultipart()
msg['From'] = "email@gmail.com"
msg['To'] = to
msg['Subject'] = subject
msg['Reply-to'] = "email2@domain2.com"
Run Code Online (Sandbox Code Playgroud)
但这不起作用.在Python文档中找不到任何关于此的信息.
谢谢.
这是我的脚本:
#!/usr/bin/python
import smtplib
msg = 'Hello world.'
server = smtplib.SMTP('smtp.gmail.com',587) #port 465 or 587
server.ehlo()
server.starttls()
server.ehlo()
server.login('myname@gmail.com','mypass')
server.sendmail('myname@gmail.com','somename@somewhere.com',msg)
server.close()
Run Code Online (Sandbox Code Playgroud)
我只是想从我的Gmail帐户发送电子邮件.由于gmail的要求,该脚本使用starttls.我在两个web主机上尝试了这个,1and1和webfaction.1and1给我一个'连接被拒绝'错误,webfaction报告没有错误,但只是不发送电子邮件.我看不出脚本有什么问题,所以我认为它可能与网络主机有关.任何想法和意见将不胜感激.
编辑:我打开了调试模式.从输出,它看起来像是成功发送了消息...我只是从来没有收到它.
send: 'ehlo web65.webfaction.com\r\n'
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n'
reply: '250-SIZE 35651584\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-STARTTLS\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250 PIPELINING\r\n'
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84]
SIZE 35651584
8BITMIME
STARTTLS
ENHANCEDSTATUSCODES
PIPELINING
send: 'STARTTLS\r\n'
reply: '220 2.0.0 Ready to start TLS\r\n'
reply: retcode (220); Msg: 2.0.0 Ready to start TLS
send: 'ehlo web65.webfaction.com\r\n' …
Run Code Online (Sandbox Code Playgroud) 我编写了一个脚本,将消息写入文本文件,并将其作为电子邮件发送.一切顺利,除了电子邮件似乎总是在一行.
我添加换行符\n
,它适用于文本文件,但不适用于电子邮件.你知道可能的原因是什么吗?
这是我的代码:
import smtplib, sys
import traceback
def send_error(sender, recipient, headers, body):
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
session = smtplib.SMTP('smtp.gmail.com', 587)
session.ehlo()
session.starttls()
session.ehlo
session.login(sender, 'my password')
send_it = session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()
return send_it
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
sender = 'sender_id@gmail.com'
recipient = 'recipient_id@yahoo.com'
subject = 'report'
body = "Dear Student, \n Please send your report\n Thank you for your attention"
open('student.txt', 'w').write(body)
headers = ["From: " + sender, …
Run Code Online (Sandbox Code Playgroud) 使用python我想从我的应用程序发送电子邮件,但它显示错误
SMTP AUTH extension not supported by server
Run Code Online (Sandbox Code Playgroud)
该计划的代码,
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
fromaddr = "test1@example.com"
toaddr = "test2@example.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Test Mail"
body = "Test mail from python"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.example.com', 25)
server.ehlo()
server.starttls()
server.ehlo()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
Run Code Online (Sandbox Code Playgroud)
Telnet输出:
ehlo test1.example.com
250-hidden
250-HELP
250-SIZE 104857600
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
Run Code Online (Sandbox Code Playgroud)
我需要从应用程序进行身份验证和发送邮件.