python发邮件(带附件)

通过zmail包发邮件,如下以qq邮箱为例

#coding: utf-8
#author: dyl
#date:   2020/8/27 2:35 下午
#IDE:    PyCharm

import zmail
import smtplib  #加载smtplib模块
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
from email.header import Header

from email.mime.application import MIMEApplication
import datetime
import os

#注意: 此处如果邮箱是qq,密码需要填写授权码,自行百度教程,按照教程发短信就可以获得
# 如果不是qq,可能填写登录密码即可,如还有特殊规定,视情况而定
user = 'xxxx@qq.com'
passwd = 'imvheozlx'

alert_sender = zmail.server(
    user,
    passwd, 
    smtp_host='smtp.qq.com',
    smtp_port=465,
    smtp_ssl=True,
    # pop_host='pop.exmail.qq.com',
    # pop_port=995
)

def send_alert_email(subject='',
                     content_text='',
                     recipients=[],
                     cc=[],
                     file_name=None):
    # 签名,自行填写
    mail_sign = '\n\n' \
                + '------------------\n' \
                + 'dyl\n' 

    mail = {
        'subject': subject,  # Anything you want.
        'content_text': content_text+mail_sign,  # Anything you want.
    }

    if os.path.exists(file_name)!=None:
        mail["attachments"] = [file_name]

    return alert_sender.send_mail(recipients=recipients, mail=mail, cc=cc)

def send_mail_interface(file_name):
    # 主题
    subject_content = "测试"
    # 信正文
    mail_content ="各位老师好,\n\n辛苦各位!"
   # 收信人,可以是多个
    recipients = [
        "tao@xxx.com",
    ]
   # 抄送人,可以是多个
    cc = [
        "xxx@xxx.com",
    ]
    send_alert_email(subject=subject_content,
                     content_text=mail_content,
                     recipients=recipients,
                     cc=cc,
                     file_name=file_name)

if __name__ == "__main__":
    #附件名
    file_name = './test.xlsx'
    send_mail_interface(file_name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你遇到了这个问题,可能是因为你没有正确设置附件的路径,或者路径不正确。 以下是一些可能的解决方案: 1. 确认附件路径是否正确 在代码中,你需要指定附件的完整路径。例如,如果你的附件在`/Users/username/Documents/file.txt`,那么你应该使用以下代码来指定路径: ```python attachment = '/Users/username/Documents/file.txt' ``` 如果你不确定路径是否正确,可以使用`os.path.exists()`函数来检查文件是否存在。例如: ```python import os attachment = '/Users/username/Documents/file.txt' if os.path.exists(attachment): # do something with the attachment else: print('File not found:', attachment) ``` 2. 确认文件是否存在并具有读取权限 在尝试打开文件之前,你需要确保文件存在并具有读取权限。你可以使用`os.access()`函数来检查文件是否具有读取权限。例如: ```python import os attachment = '/Users/username/Documents/file.txt' if os.path.exists(attachment) and os.access(attachment, os.R_OK): # do something with the attachment else: print('File not found or not readable:', attachment) ``` 3. 使用绝对路径 如果你不确定相对路径是否正确,可以使用绝对路径来指定附件路径。例如: ```python import os current_dir = os.path.abspath(os.path.dirname(__file__)) attachment = os.path.join(current_dir, 'file.txt') if os.path.exists(attachment) and os.access(attachment, os.R_OK): # do something with the attachment else: print('File not found or not readable:', attachment) ``` 这将使用当前脚本的绝对路径作为基础路径,然后使用`os.path.join()`函数将文件名添加到路径中。 4. 确认文件名是否正确 如果你使用的是相对路径,确保文件名和文件扩展名正确。例如,如果你的文件名是`file.txt`而不是`file.txt.doc`,则应该使用以下代码: ```python attachment = 'file.txt' ``` 5. 检查邮件服务器设置 如果你的代码中附件路径正确,但仍然无法找到附件,那么可能是因为邮件服务器配置不正确。确保你已经正确配置了SMTP服务器和端口,并且已经提供了正确的用户名和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值