【问题标题】:send mail using python使用python发送邮件
【发布时间】:2016-02-07 11:34:12
【问题描述】:

问题:当我向用户发送邮件时,从未在用户收件箱中看到的用户名仅显示电子邮件 ID,但我需要发件人的用户名

来自:demo@gmail.com 用户名:Demo

收件人:demotest@gmail.com

代码

import smtplib
fromaddr = From
toaddrs  = To
msg = 'Why,Oh why!'
username = From
password = *******
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

【问题讨论】:

标签: python python-2.7 email smtplib


【解决方案1】:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

fromaddr = 'demo@gmail.com'
toaddrs = 'demotest@gmail.com'

msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = "good morning" #like name
msg['To'] = "GGGGGG"

body = MIMEText("example email body")
msg.attach(body)

username = 'demo@gmail.com'
password = ''
server = smtplib.SMTP_SSL('smtp.googlemail.com', 465)
server.login(username, password)
server.sendmail(fromaddr, toaddrs, msg.as_string())
server.quit()

【讨论】:

    【解决方案2】:

    或者走简单的路,安装yagmail

    给定:

    To = 'someone@gmail.com'
    From = 'me@gmail.com'
    pwd = '******'
    alias = 'someone'
    

    运行:

    import yagmail
    yag = yagmail.SMTP(From, pwd)
    yag.send({To: alias}, 'subject', 'Why,Oh why!')
    

    安装可能由pip install yagmail完成

    【讨论】:

    • 谢谢,但不是必需的 yagmail LIB
    【解决方案3】:

    您只需要正确创建消息。我认为最方便的方法是使用特殊的消息对象。我放置了一个类,也许可以帮助您在项目中发送消息。

    import os
    import smtplib
    
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    
    
    
    class EmailSender(object):
        def __init__(self, subject, to, config):
            self.__subject = subject
            self.__to = tuple(to) if hasattr(to, '__iter__') else (to,)
    
            self.__from = config['user']
            self.__password = config['password']
            self.__server = config['server']
            self.__port = config['port']
    
            self.__message = MIMEMultipart()
            self.__message['Subject'] = self.__subject
            self.__message['From'] = self.__from
            self.__message['To'] = ', '.join(self.__to)
    
    
        def add_text(self, text):
            self.__message.attach(
                MIMEText(text)
            )
    
    
        def add_image(self, img_path, name=None):
            if name is None:
                name = os.path.basename(img_path)
    
            with open(img_path, 'rb') as f:
                img_data = f.read()
                image = MIMEImage(img_data, name=name)
                self.__message.attach(image)
    
    
        def send(self):
            server = smtplib.SMTP_SSL(self.__server, self.__port)
            server.login(self.__from, self.__password)
            server.sendmail(self.__from, self.__to, self.__message.as_string())
            server.close()
    
    
    
    sender = EmailSender("My letter", "my_target@email", {
        'user': "from@email",
        'password': "123456",
        'server': "mail.google.com"
        'port': 465
    })
    sender.add_text("Why,Oh why!")
    sender.send()
    

    【讨论】:

    • 得到了类似 Traceback 的错误(最近一次调用最后一次):socket.error: [Errno 101] Network is unreachable
    • 也许,这会对你有所帮助:stackoverflow.com/questions/28328222/…
    【解决方案4】:

    smtplib 不会自动包含 any 标头,您需要包含 From: 标头,因此您必须自己放置一个,如下所示:

    # Add the From: and To: headers at the start!
    msg = ("From: %s\r\nTo: %s\r\n\r\n"
           % (fromaddr, ", ".join(toaddrs)))
    

    您可以在DOCS 中看到。

    【讨论】:

    • 好的,但问题可能与标题有关,让我们继续调查。如果您找到解决方案,请告诉我们
    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 2019-10-18
    • 2015-08-13
    • 2010-09-09
    • 2012-06-30
    • 2020-11-19
    相关资源
    最近更新 更多