python3 发送邮件

from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
import smtplib


class Mail:
   
   
    

    def __init__(self, u_p_r, f_t_h_t, accessory, connetc, debuglevel=False):
        self.c_1 = u_p_r
        self.c_2 = f_t_h_t
        self.c_3 = accessory
        self.c_4 = connetc
        self.sender = u_p_r[0]
        self.sender_pass = u_p_r[1]
        self.receivers = u_p_r[2]
        self.From = f_t_h_t[0]
        self.To = f_t_h_t[1]
        self.Header = f_t_h_t[2]
        self.Text = f_t_h_t[3]
        self.Accessory = accessory
        self.server_host = connetc[0]
        self.server_port = connetc[1]
        self.debuglevel = debuglevel
        self.debugmessage = ""

    def check(self):
        for date in [self.c_1, self.c_2, self.c_3, self.c_4]:
            for ci in date:
                if type(ci) is list:
                    pass
                elif type(ci) is str:
                    pass
                else:
                    return -1

    def mail(self):
        if self.check() == -1:
            print("检查未通过")
            return -1

        message = MIMEMultipart()
        if self.From.strip() != "":
            message['From'] = Header(self.From, 'utf-8')
        if self.To.strip() != "":
            message['To'] = Header(self.To, 'utf-8')
        if self.Header.strip() != "":
            message['Subject'] = Header(self.Header, 'utf-8')
        if self.Text.strip() != "":
            message.attach(MIMEText(self.Text, 'plain', 'utf-8'))
        for fs in range(len(self.Accessory)):
            att1 = MIMEText(open(self.Accessory[fs], 'rb').read(), 'base64', 'utf-8')
            sign = self.Accessory[fs].find("/")
            signu = '/'
            if sign == -1:
               signu = '\\'
            att1["Content-Type"] = 'application/octet-stream'
            att1["Content-Disposition"] = 'attachment; filename=%s' % Header(self.Accessory[fs].split(signu)[-1], 'utf-8').encode('utf-8')
            message.attach(att1)


        try:
            smtpObj = smtplib.SMTP()
            smtpObj.connect(str(self.server_host), int(self.server_port))
            smtpObj.login(self.sender, self.sender_pass)
            if self.debuglevel is True:
                self.debugmessage = smtpObj.set_debuglevel(1)
            smtpObj.sendmail(self.sender, self.receivers.split(';'), message.as_string())
            return 0
        except smtplib.SMTPException as e:
            print("Error: 无法发送邮件")
            print(e)
            return -1


if __name__ == '__main__':
    # 发件人  密钥    接收人  用“;”分开
    user = ['******@qq.com', '*********', '*****;']
    #     来自(from)       到(to)      标题       正文
    text = ['000', '', '数据统计', '请查收']
    # 第三方服务端口  465 25 ...
    server = ["smtp.qq.com", "25"]
    # 附件地址列表
    files = [fiilename1, fiilename2]
    mail1 = Mail(user, text, files, server)
    mail1.mail()

使用Python通过POP3协议发送邮件其实是一个常见的误解,因为通常我们不会直接使用POP3发送邮件。POP3 (Post Office Protocol Version 3) 主要是用于从邮件服务器上接收和下载电子邮件到本地设备的协议。 如果您想要编写一个程序来发送电子邮件,则应该考虑使用SMTP(Simple Mail Transfer Protocol),它是专为传输电子邮箱而设计的标准通信协议。 下面简要介绍如何利用 Python 的 `smtplib` 库 发送一封简单的纯文本电邮: ```python import smtplib from email.mime.text import MIMEText # 邮件内容设置 msg = MIMEText('这是一封来自Python脚本自动发出测试邮件.', 'plain', 'utf-8') # 发件人、收件人的信息等可以在这里修改 sender_email = "your-email@example.com" receiver_emails = ["recipient1@example.com", "recipient2@example.com"] password = input("Type your password and press enter:") # 注意安全地处理密码! msg['Subject'] = '主题行 - 这里填写邮件标题' msg['From'] = sender_email msg['To'] = ', '.join(receiver_emails) try: server = smtplib.SMTP_SSL('smtp.example.com', 465) # SMTP服务器地址及端口号 server.login(sender_email, password) server.sendmail(sender_email, receiver_emails, msg.as_string()) print("邮件成功发送") except Exception as e: print(f"发生错误: {e}") finally: if 'server' in locals(): server.quit() ``` 为了能够顺利运行上述代码片段,请替换示例中的发信方邮箱账号(`your-email`)以及对应的SMTP服务提供商域名 (`smtp.example.com`) 和端口数值;同时还需要提供正确的登录凭据(如用户名即邮箱地址本身与对应授权码)。请注意保护好个人账户信息安全,在实际部署时避免明文存储敏感数据,并确保遵守相关的隐私政策和服务条款规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值