Python邮件发送程序代码

# -*- coding:utf-8 -*-
# 2024-3-4
# Pythonit教程网:blog.pythonit.cn
# 云服务器地址:woaiyundun.cn
# Python全栈课件视频教程:www.dqu.cc

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


class EmailSender:
    def __init__(self, sender_email, sender_password, smtp_server, smtp_port, sender_name=None):
        self.sender_email = sender_email
        self.sender_password = sender_password
        self.smtp_server = smtp_server
        self.smtp_port = smtp_port
        self.sender_name = sender_name  # 添加这一行

    def send_email(self, receiver_email, subject, message, attachment_path=None, smtp_port=None):
        msg = MIMEMultipart()
        sender_header = Header(self.sender_name, 'utf-8') if self.sender_name else self.sender_email
        msg['From'] = sender_header
        msg['To'] = receiver_email
        msg['Subject'] = subject

        msg.attach(MIMEText(message, 'plain'))

        if attachment_path and os.path.exists(attachment_path):
            attachment = open(attachment_path, 'rb')
            part = MIMEBase('application', 'octet-stream')
            part.set_payload(attachment.read())
            encoders.encode_base64(part)
            part.add_header('Content-Disposition', f'attachment; filename= {os.path.basename(attachment_path)}')
            msg.attach(part)

        try:
            with smtplib.SMTP(self.smtp_server, self.smtp_port if not smtp_port else smtp_port) as server:
                server.starttls()
                server.login(self.sender_email, self.sender_password)
                server.sendmail(self.sender_email, receiver_email, msg.as_string())
                print("邮件发送成功!")
        except smtplib.SMTPException as e:
            print(f"发送邮件时出现错误:{e}")

        # 测试调用


def main():
    sender_email = '你的邮箱地址'  # 发送者邮箱
    sender_password = '你的邮箱密码'  # smtp密码或者自建邮箱的邮箱密码
    smtp_server = 'smtp.example.com'  # 邮箱服务器地址
    smtp_port = 587  # 根据你的邮箱服务商选择合适的端口,例如Gmail是587,QQ邮箱是465(SSL)或587(STARTTLS)
    sender_name = '你的名字'  # 可选,发件人名字

    email_sender = EmailSender(sender_email, sender_password, smtp_server, smtp_port, sender_name=sender_name)
    email_sender.send_email('接收者邮箱地址', '邮件主题', '邮件内容', attachment_path='/path/to/attachment.txt')


if __name__ == '__main__':
    main()
  1. 你需要将sender_emailsender_passwordsmtp_serversmtp_portsender_name替换为实际的值。
  2. 你需要将receiver_emailattachment_path替换为实际的接收者邮箱地址和附件路径(如果你想添加附件的话)。
  3. 根据你的邮箱服务商,smtp_port可能需要更改。例如,Gmail使用587端口,而QQ邮箱可以使用465(SSL)或587(STARTTLS)端口。
  4. 某些邮箱服务商可能需要你在账户设置中开启“不够安全的应用”的访问权限,或者使用应用专用密码(而非你的邮箱密码)作为sender_password
  5. 在真实环境中,不建议在代码中硬编码敏感信息(如邮箱密码),而应使用
  • 16
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值