好吧,伙计们,我已经在网上看了很多年,根本找不到答案.我尝试过很多建议,但似乎无法让它发挥作用.我正在尝试使用python(smtplib和电子邮件模块)和gmail服务发送电子邮件.这是我导入的包:
import time, math, urllib2, urllib, os, shutil, zipfile, smtplib, sys
from email.mime.text import MIMEText
Run Code Online (Sandbox Code Playgroud)
这是我发送电子邮件的def语句:
def sendmessage():
print('== You are now sending an email to Hoxie. Please write your username below. ==')
mcusername = str(raw_input('>> Username: '))
print('>> Now your message.')
message = str(raw_input('>> Message: '))
print('>> Attempting connection to email host...')
fromaddr = 'x@gmail.com'
toaddrs = 'xx@gmail.com'
username = 'x@gmail.com'
password = '1013513403'
server = smtplib.SMTP('smtp.gmail.com:587')
subject = 'Email from',mcusername
content = message
msg = MIMEText(content)
msg['From'] = …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何使用python发送电子邮件附件
我想编辑以下代码并发送带附件的电子邮件.附件是一个pdf文件,它位于linux环境下的/home/myuser/sample.pdf下.我应该在下面更改什么?
import smtplib
fromaddr = 'myemail@gmail.com'
toaddrs = 'youremail@gmail.com'
msg = 'Hello'
# Credentials (if needed)
username = 'myemail'
password = 'yyyyyy'
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
Run Code Online (Sandbox Code Playgroud) 我无法看到我在哪里出错,我希望有人能发现问题.我想发一封电子邮件到多个地址; 但是,它只将它发送到列表中的第一个电子邮件地址,而不是两者.这是代码:
import smtplib
from smtplib import SMTP
recipients = ['example1@gmail.com', 'example2@example.com']
def send_email (message, status):
fromaddr = 'from@gmail.com'
toaddrs = ", ".join(recipients)
server = SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.ehlo()
server.login('example_username', 'example_pw')
server.sendmail(fromaddr, toaddrs, 'Subject: %s\r\n%s' % (status, message))
server.quit()
send_email("message","subject")
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过这个错误?
感谢您的时间.
我想记录用户回复我的邮件并在我的应用程序中将其显示为线程.为此,我在电子邮件头中使用了message-id的帮助.当我发送邮件时,我可以看到屏幕上打印的消息ID如何获得此消息ID.我创建的message-id也被覆盖了.我的代码如下.
import smtplib
from email.mime.text import MIMEText
subject = 'Hello!'
message = 'hiii!!!'
email = 'someone@somewhere.com'
send_from = 'me@example.com'
msg = MIMEText(message, 'html', 'utf-8')
msg['Subject'] = subject
msg['From'] = send_from
msg['To'] = email
msg['Message-ID'] = '01234567890123456789abcdefghijklmnopqrstuvwxyz'
send_to = [email]
smtp_server = 'email-smtp.us-east-1.amazonaws.com'
smtp_port = 587
user_name = 'abcd'
password = 'abcd'
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.set_debuglevel(True)
server.starttls()
server.ehlo()
server.login(user_name,password)
server.sendmail(send_from, send_to, msg.as_string())
except Exception, e:
print e
Run Code Online (Sandbox Code Playgroud) 当我尝试在我的Python代码中使用smtplib时,我收到以下错误.
Traceback (most recent call last):
File "myemail.py", line 1, in <module>
import smtplib
File "/usr/lib64/python2.7/smtplib.py", line 46, in <module>
import email.utils
ImportError: No module named utils
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,当我直接使用Python解释器时,我可以包含该库.
以前该文件名为'email.py',但根据stackoverflow关于类似问题的答案,我将名称更改为'myemail.py'.它仍然无法正常工作.请帮助.
如何捕获Python smtplib库的调试输出?
这是我的测试程序:
import smtplib
s = smtplib.SMTP("mx10.comcast.com")
s.set_debuglevel(1)
s.sendmail("no-such-sender@comcast.com",["no-such-receiver@comcast.com"],"""
from: no-such-sender@comcast.com
to: no-such-receiver@comcast.com
subject: no such message
This message won't be delivered to anybody.
""")
Run Code Online (Sandbox Code Playgroud)
这是输出:
send: 'ehlo dance.local\r\n'
reply: '250-mx10.comcast.com says EHLO to 129.6.220.67:57015\r\n'
reply: '250-SIZE 40000000\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-8BITMIME\r\n'
reply: '250 XXXXXXXA\r\n'
reply: retcode (250); Msg: mx10.comcast.com says EHLO to 129.6.220.67:57015
SIZE 40000000
PIPELINING
ENHANCEDSTATUSCODES
8BITMIME
XXXXXXXA
send: 'mail FROM:<no-such-sender@comcast.com> size=137\r\n'
reply: '250 2.0.0 MAIL FROM accepted\r\n'
reply: retcode (250); Msg: 2.0.0 MAIL FROM …Run Code Online (Sandbox Code Playgroud) 我的剧本
from stmplib import SMTP
con = SMTP(server, port)
con.starttls()
con.login(user, pass)
con.quit()
Run Code Online (Sandbox Code Playgroud)
落入错误:
python2.7/ssl.py", line 847, in do_handshake self._sslobj.do_handshake()
当我运行命令openssl到该服务器它属于错误21: Verify return code: 21 (unable to verify the first certificate)。
我想知道如何在python选项的smtplib中指定“通过tls建立到电子邮件服务器的连接时始终接受自签名证书”吗?就像我在requests.get设置key中所做的那样verify=False。
使用自定义smtp类更新此变体,并context = ssl._create_unverified_context()返回与上述相同的错误:
import smtplib
import ssl
class MySMTP(smtplib.SMTP):
def __init__(self, host='', port=0, timeout=5):
smtplib.SMTP.__init__(self, host, port, timeout=timeout)
self._host = host
def starttls(self, keyfile=None, certfile=None, context=None):
from urllib import _have_ssl
self.ehlo_or_helo_if_needed()
if not self.has_extn("starttls"):
raise SMTPNotSupportedError("STARTTLS extension …Run Code Online (Sandbox Code Playgroud) 所以我可以使用smtplib登录并通过gmail发送邮件(使用下面的脚本),但我只是想知道是否使用oauth2是一个像imaplib一样的选项?我没有在smtplib文档页面上看到有关oauth的任何内容,我没有发现任何谷歌搜索.谢谢.
#! /usr/bin/python
import smtplib
to = 'myemailaddress'
gmail_user = 'myemailaddress'
gmail_pwd = 'passwd'
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:testing \n'
print header
msg = header + '\n this is test msg from me \n\n'
smtpserver.sendmail(gmail_user, to, msg)
print 'done!'
smtpserver.close();
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢samy.vilar在他的回答中提供了非常详细的解释.但是,我有点麻烦.这是我的脚本:
#! /usr/bin/python
import oauth2 as oauth
import oauth2.clients.smtp as smtplib
consumer = oauth.Consumer('anonymous', 'anonymous')
token = oauth.Token('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF')
url …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SMTP_SSL 发送电子邮件(邮件服务器不支持 smtp)。
import smtp
s = smtp.SMTP_SSL('xxxxx')
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
模块对象没有属性“SMTP_SSL”
我不太明白为什么 python smptlib 没有属性 SMTP_SSL ,因为python 文档显示 SMTP_SSL 有这个属性。
找到了很多如何发送邮件的例子,但我如何阅读收件箱?例如 yandex。
import smtplib as smtp
email = "me@example.com"
password = "password"
server = smtp.SMTP_SSL('smtp.yandex.com')
server.set_debuglevel(1)
server.ehlo(email)
server.login(email, password)
server.auth_plain()
# server.get_and_print_your_inbox_magic_method()
server.quit()
Run Code Online (Sandbox Code Playgroud)