【问题标题】:How to send email attachments with Python 3.6如何使用 Python 3.6 发送电子邮件附件
【发布时间】:2017-11-20 08:01:57
【问题描述】:

你介意帮我吗,拜托! 我使用此页面上的所有代码How to send email attachments with Python

但是没用=(

这是我使用的最后一个版本

import smtplib
from smtplib import SMTP_SSL
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
import os

filepath = 'D:/files/1.jpg'
fromaddr = "name@gmail.com"
toaddr = "name2@gmail.com"
password = '********'
mail_adr = 'smtp.gmail.com'
mail_port = 587

# Compose attachment
part = MIMEBase('application', "octet-stream")
part.set_payload(open(filepath, "rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % os.path.basename(filepath))

# Compose message
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg.attach(part)

# Send mail
smtp = SMTP_SSL()
smtp.set_debuglevel(1)
smtp.connect(mail_adr, mail_port)
smtp.login(fromaddr, password)
smtp.sendmail(fromaddr, toaddr, msg.as_string())
smtp.quit()

这是我犯的错误

connect: ('smtp.gmail.com', 587)
connect: ('smtp.gmail.com', 587)
Traceback (most recent call last):
  File "C:/Users/Oleg/Desktop/444.py", line 31, in <module>
    smtp.connect(mail_adr, mail_port)
  File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\smtplib.py", line 335, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\smtplib.py", line 1037, in _get_socket
    server_hostname=self._host)
  File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\ssl.py", line 401, in wrap_socket
    _context=self, _session=session)
  File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\ssl.py", line 808, in __init__
    self.do_handshake()
  File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\ssl.py", line 1061, in do_handshake
    self._sslobj.do_handshake()
  File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\ssl.py", line 683, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:749)

【问题讨论】:

  • 这不是你的问题,但encoders.encode_base64(part) 没有做任何事情,只是在浪费时间。您对部分进行编码,然后通过不将其分配给变量来丢弃编码部分。
  • 你需要使用TLS,而不是SSL
  • 我不明白为什么会出现这个错误,谁能解释一下? ImportError:无法导入名称“编码器”
  • 它是 编码器,而不是 编码器。 Python 是区分大小写的语言。

标签: python email attachment send


【解决方案1】:

你试过emailpy吗? (我是作者)

它支持任何附件格式,除非您的电子邮件提供商限制它。

例子:

import emailpy
emailManager = emailpy.EmailManager('yourcooladdress@domain.com', 'youremailpassword') # this may take a few seconds to generate
emailManager.send(['sendsomething@gmail.com', 'anotheremail@hotmail.com'],  \
subject = 'Subject here', body = 'body text here', html = 'some html here', \
attachments = ['file1.png', 'file2.txt', 'file3.py'], \
nofileattach = {'file.txt': 'hi, this is some data'}) 
# send email to sendsomething@gmail.com and anotheremail@hotmail.com with subject "Subject here"
#, body "body text here", html "some html here", and some attachments: 
# "file1.png", "file2.txt", "file3.py". Also, it adds a file called file.txt
# that has the contents "hi, this is some data"

emailpy 文档可以在其 PyPI 页面上下载,也可以从 here 下载

所有邮件服务器都用emailpy测试成功,在python 3.x上使用emailpy不会报错(python 2不支持emailpy,主要是语法问题)

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2014-05-27
    • 2015-06-19
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多