标签: smtplib

Python电子邮件发送TypeError:预期的字符串或缓冲区

好吧,伙计们,我已经在网上看了很多年,根本找不到答案.我尝试过很多建议,但似乎无法让它发挥作用.我正在尝试使用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 typeerror smtplib

6
推荐指数
2
解决办法
8048
查看次数

如何在Python中发送带有pdf附件的电子邮件?

可能重复:
如何使用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)

python email smtplib email-attachments

6
推荐指数
2
解决办法
5万
查看次数

Python不向多个地址发送电子邮件

我无法看到我在哪里出错,我希望有人能发现问题.我想发一封电子邮件到多个地址; 但是,它只将它发送到列表中的第一个电子邮件地址,而不是两者.这是代码:

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)

有没有人遇到过这个错误?

感谢您的时间.

python email gmail smtp smtplib

6
推荐指数
3
解决办法
2万
查看次数

如何获取smtplib发送的电子邮件的消息ID

我想记录用户回复我的邮件并在我的应用程序中将其显示为线程.为此,我在电子邮件头中使用了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 email django smtplib

6
推荐指数
2
解决办法
3084
查看次数

smtplib导入email.utils错误

当我尝试在我的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 python-2.7

6
推荐指数
1
解决办法
5974
查看次数

从Python smtplib捕获调试输出

如何捕获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)

python error-handling smtplib

6
推荐指数
1
解决办法
4535
查看次数

如何通过smtplib(TSL)从电子邮件服务器接受自签名证书?

我的剧本

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)

python ssl smtplib python-2.7 starttls

6
推荐指数
2
解决办法
599
查看次数

python&smtplib:是否可以使用oauth2通过gmail发送邮件?

所以我可以使用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)

python oauth smtplib oauth-2.0

5
推荐指数
1
解决办法
7324
查看次数

Python smtplib 没有属性 SMTP_SSL

我正在尝试使用 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 有这个属性。

python centos smtplib

5
推荐指数
1
解决办法
1363
查看次数

如何使用 python 和 smtplib 阅读电子邮件

找到了很多如何发送邮件的例子,但我如何阅读收件箱?例如 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)

python email smtp smtplib yandex

5
推荐指数
1
解决办法
5676
查看次数