精华内容
下载资源
问答
  • 工作中常常碰到需要给不同的人发不同附件,但是内容又相似的情况,比如给合作方发送账单,给员工工资,用python的 email库,可以方便的发送邮件,参考了一些网上的资料,整理了一个批量发送邮件的python脚本 ...

    工作中常常碰到需要给不同的人发不同的附件,但是内容又相似的情况,比如给合作方发送账单,给员工发工资,用python的 email库,可以方便的发送邮件,参考了一些网上的资料,整理了一个批量发送邮件的python脚本

    #分别发送给多个人,每个人的附件内容不一样
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header
    from email.utils import formataddr
    import smtplib
    from pandas import DataFrame,Series
    import pandas as pd
    from_addr='****'#发件地址
    password = '****'#邮箱授权码,非邮箱登录密码
    cc_addr="****"  #抄送地址,其实抄送和发送是一样的,只不过显示的不一样
    
    smtp_server = 'smtp.163.com'#假设是用163邮箱发送的
    data=pd.read_excel("数据列表.xlsx",keep_default_na=False)#一张记录邮件地址的基本信息表
    
    for i in range(len(data)):
        if data['邮件地址'][i]=="":#如果没有记录邮件地址,就略过
            continue
        to_addr= data['邮件地址'][i]
        
        msg = MIMEMultipart()#这个对象代表邮件本身
        #一下主要是显示在发件人,收件人,抄送人,标题,正文等的内容
        msg['From'] = formataddr((Header("发件人姓名","utf-8").encode(),from_addr))
        msg['To'] = formataddr((Header(data['姓名'][i],"utf-8").encode(),to_addr))
        msg['Cc'] = formataddr((Header('抄送人姓名',"utf-8").encode(),cc_addr))
        msg['Subject'] = Header('这是一封python邮件','utf-8').encode()
        mail_content='hi %s\n  hello,it is an email...,一二三'%data['姓名'][i] #正文
        msg_text = MIMEText(mail_content,'plain','utf-8')
        msg.attach(msg_text)   
        #mail_content = """<p>Python 邮件发送测试...</p><p><a href="http://www.sina.com">这是一个链接</a></p>"""  
        #msg_text = MIMEText(mail_content, 'html', 'utf-8'),正文也可以是这种带链接的形式
            
        try:
            with open(data['附件名称'][i],'rb') as f:
                fc=f.read()
            atta=MIMEText(fc,'base64','utf-8')    
            atta.add_header("Content-Disposition", "attachment", filename=("gbk","",data['附件名称'][i])) #这里我的名字是正文,视不同情况更改
            msg.attach(atta)
            server = smtplib.SMTP(smtp_server,25)#默认端口是25
            #server.set_debuglevel(1)#可以打印出和stamp服务器的交互信息
            
            #登录,然后发送
            server.login(from_addr,password)
            server.sendmail(from_addr,[to_addr,cc_addr],msg.as_string())
            server.quit()
            print("邮件已发送")
        except FileNotFoundError: 
            print("%s这个文件找到"%data['附件名称'][i])#附件未找到的不发;也可以只发正文,不发附件,要稍作调整                
    

    邮件发送列表数据
    以上内容还可再优化下,比如没有加密,正文还可更复杂一些,比如直接插入图片,直接插入表格,比如为保守起见,这些邮件先存在草稿箱,临发前再人工识别下

    展开全文
  • C#邮件发送 批量发送邮件 发送邮件嵌入图片 添加附件

    一、邮件发送

    public void Send()
            {
            	 MailMessage mail = new MailMessage();
            	  try
                {
                	 //设置邮件的标题
                	 mail.Subject ="悠哉WebService报告";
                	 mail.SubjectEncoding = System.Text.Encoding.UTF8;
                	   //设置邮件的发件人
                	    string SendEmail = ConfigurationManager.AppSettings["SendEmail"].ToString();
                	     MailAddress Addressfrom = new MailAddress(SendEmail, "uzai", System.Text.Encoding.UTF8); //邮件的发件人
                	    mail.From = Addressfrom;
                	      /*  这里这样写是因为可能发给多个联系人,每个地址用 , 号隔开
                         */
                         List<string> mailAddress = new List<string>();
                    foreach (string address in mailAddress)
                    {
                        if (address != string.Empty)
                        {
                            mail.To.Add(new MailAddress(address, address, System.Text.Encoding.UTF8));
                        }
                    }
                      //设置邮件的内容
                    mail.Body = mailContent;
                     //设置邮件的格式
                    mail.BodyEncoding = System.Text.Encoding.UTF8;
                     //mail.IsBodyHtml = true;
                       //设置邮件的发送级别
                    mail.Priority = MailPriority.Normal;
                    //发送通知
                       mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                         SmtpClient client = new SmtpClient();
                            //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
                             client.Host = "smtp.gmail.com";
                              client.Port = 25;
                               client.Timeout = 9999;
                                 client.UseDefaultCredentials = true;
                    client.EnableSsl = true;
                     //邮箱登陆名和密码
                    string EmailLogName = ConfigurationManager.AppSettings["EmailLogName"].ToString();
                    string EmailLogPwd = ConfigurationManager.AppSettings["EmailLogPwd"].ToString();
                    client.Credentials = new System.Net.NetworkCredential(EmailLogName, EmailLogPwd);
                      client.DeliveryMethod = SmtpDeliveryMethod.Network;
                        //发送email
                    client.Send(mail);
                     }
                catch (Exception)
                {
                	  //当邮件发送失败,发送异常时 使用备用方法调用备用邮箱发送
                    SendBackUp();
                     }
                finally
                {
                    mail.Dispose();
                }
            }
            public void SendBackUp()
            {
            	 MailMessage mail = new MailMessage();
            	  try
                {
                	 //设置邮件的标题
                	 mail.Subject ="悠哉WebService报告";
                	 mail.SubjectEncoding = System.Text.Encoding.UTF8;
                	   //设置邮件的发件人
                	    string SendEmail = ConfigurationManager.AppSettings["SendEmail"].ToString();
                	     MailAddress Addressfrom = new MailAddress(SendEmail, "uzai", System.Text.Encoding.UTF8); //邮件的发件人
                	    mail.From = Addressfrom;
                	      /*  这里这样写是因为可能发给多个联系人,每个地址用 , 号隔开
                         */
                         List<string> mailAddress = new List<string>();
                    foreach (string address in mailAddress)
                    {
                        if (address != string.Empty)
                        {
                            mail.To.Add(new MailAddress(address, address, System.Text.Encoding.UTF8));
                        }
                    }
                      //设置邮件的内容
                    mail.Body = mailContent;
                     //设置邮件的格式
                    mail.BodyEncoding = System.Text.Encoding.UTF8;
                     //mail.IsBodyHtml = true;
                       //设置邮件的发送级别
                    mail.Priority = MailPriority.Normal;
                    //发送通知
                       mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                         SmtpClient client = new SmtpClient();
                            //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
                             client.Host = "smtp.gmail.com";
                              client.Port = 25;
                               client.Timeout = 9999;
                                 client.UseDefaultCredentials = true;
                    client.EnableSsl = true;
                     //邮箱登陆名和密码
                    string EmailLogName = ConfigurationManager.AppSettings["EmailLogName"].ToString();
                    string EmailLogPwd = ConfigurationManager.AppSettings["EmailLogPwd"].ToString();
                    client.Credentials = new System.Net.NetworkCredential(EmailLogName, EmailLogPwd);
                      client.DeliveryMethod = SmtpDeliveryMethod.Network;
                        //发送email
                    client.Send(mail);
                     }
                catch (Exception)
                {
                	  //当邮件发送失败,发送异常时 使用备用方法调用备用邮箱发送
                    Send();
                     }
                finally
                {
                    mail.Dispose();
                }
            }

    二、发送邮件图片,附件

         我们在发送邮件时,一般图片都是用网络路径,但有时如果接收方不可直接访问外网,就不能看到图片了,比如公司内部邮件,跟外界就没法交流图片。

         那么我们就来把图片嵌入邮件中;查看人就没有限制了。

         ①、以linked的方式,此方式在邮件中不会出现图片的附件

         邮件内容调用图片格式为:<img src=\"cid:Email001\">
         发送邮件的服务端代码为:

     System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();      
        mailMessage.From="发送者邮箱";      
        mailMessage.To.Add("收件人邮件列表");      
        mailMessage.CC.Add("抄送人邮件列表");      
        mailMessage.Subject = subject;      
        AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(content,null,"text/html");      
        LinkedResource lrImage = new LinkedResource("a.jpg","image/gif");      
        lrImage.ContentId = "Email001";      
        htmlBody.LinkedResources.Add(lrImage);      
        mailMessage.AlternateViews.Add(htmlBody);      
        SmtpClient.Send(mailMessage);     
    
     SmtpClient smtp = new SmtpClient();   
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;   
                smtp.Host = "smtp.163.com";   
                smtp.Credentials = new NetworkCredential("renzhijie1111", "**");   
      
                MailMessage mm = new MailMessage();   
                mm.From = new MailAddress("test@163.com", "test");   
                mm.To.Add("test2@163.com");   
      
                mm.Subject = "测试图片邮件";   
      
                string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";   
                mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));   
      
                HTML格式邮件的内容   
                string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";   
                htmlBodyContent += "<a href=\"http://www.fenbi360.net粉笔编程网</a> <img src=\"cid:weblogo\">";   //注意此处嵌入的图片资源   
                AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");   
      
                  
                LinkedResource lrImage = new LinkedResource(@"d:\1.jpg", "image/gif");   
                lrImage.ContentId = "weblogo"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片   
                htmlBody.LinkedResources.Add(lrImage);   
      
                mm.AlternateViews.Add(htmlBody);   
      
                要求回执的标志   
                mm.Headers.Add("Disposition-Notification-To", "test@163.com");   
      
                自定义邮件头   
                mm.Headers.Add("X-Website", "http://www.fenbi360.net");   
      
                针对 LOTUS DOMINO SERVER,插入回执头   
                mm.Headers.Add("ReturnReceipt", "1");   
      
                mm.Priority = MailPriority.Normal; //优先级   
                mm.ReplyTo = new MailAddress("test2@163.com", "我自己");   
      
                如果发送失败,SMTP 服务器将发送 失败邮件告诉我   
                mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;   
      
                异步发送完成时的处理事件   
                smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);   
      
                开始异步发送   
                smtp.SendAsync(mm, null);   
      
      
      
      
      
    void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e)   
            {   
                if (e.Cancelled)   
                {   
                    MessageBox.Show("发送被取消");   
                }   
                else  
                {   
                    if (e.Error == null)   
                    {   
                        MessageBox.Show("发送成功");   
                    }   
                    else  
                    {   
                        MessageBox.Show("发送失败: " + e.Error.Message);   
                    }   
                }   
            }   

    ②、以邮件附件的方式,此方式图片当附件发送,并会显示在邮件内容中。

     string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";      
        htmlBodyContent += "<a href=\"testimg\"></a> <img src=\"cid:webimg\">";   //注意此处嵌入的图片资源      
                 
        System.Net.Mail.Attachment att = new Attachment(@"E:\ttt.gif");      
        att.ContentId = "webimg";    


      

    展开全文
  • 批量邮件发送附件.zip

    2020-09-03 00:11:43
    批量邮件发送附件!但是163、qq邮箱每日发邮件有上限,请注意,报550 User is over flow,就不能发送了!需要第二天才能发送
  • 每个月初都要给每个工长发预付款账单邮件,月中结算款账单。重复性机械工作。  一个及格线上的程序员,最起码的觉悟就是将重复性的机械工作自动化,于是,在我花了一个多小时,帮她给一部分工长发了一次邮箱后,...

    1 设计要点

    小猪在公司做出纳,干的活却包括了出纳、会计、结算专员等工作,周末都要被无奈在家加班,主要还没有加班费,简直是被公司严重压榨。每个月初都要给每个工长发预付款账单邮件,月中发结算款账单。重复性机械工作。
      一个及格线上的程序员,最起码的觉悟就是将重复性的机械工作自动化,于是,在我花了一个多小时,帮她给一部分工长发了一次邮箱后,默默的回来写了这个脚本。
      所以,设计要点就是一个字——
      恩,就酱。


    1.1 需求条件

    经过我观察,邮件内容分为两种,这里先说第一种,“结算款”:
    (1)邮件内容(content)不变,为固定的txt文本
    (2)附件(attch)为每个工长的结算账单(excel文件.xlsx),此文件命名为总账单中自动分割出来的名字(暂时不懂怎么分割出来的=.=),格式为:

    #月结算款(#月##号支付)_**_工长名字.xlsx

    例如 “ ”

    (3)邮件主题(Subject)为附件名(不带后缀名)
    (4)邮件接收对象(工长)的名单及其邮箱地址基本不变,偶尔变动
    (5)

    1.2 设计思路:

    (1)将工长及其邮箱地址存为CSV文件的两列,python中将其读取为字典形式,存储以供后续查询邮箱地址。

     

    通讯录CSV文件示例

    上述CSV文件转为字典形式 {"name":"value"}后:
    {"周":"1**@qq.com","朱":"2**@qq.com","王":"3**@qq.com"}

    (2)遍历文件夹中的附件(.xlsx类型文件),对其进行两种操作,一方面将其名字(不带路径和后缀)提取出来,作为邮件主题(Subject),并对Subject进一步划分,得到其中的人名(工长);另一方面,将其传入MIMEbase模块中转为邮件附件对象。

    名称变化:
    【结算款_2_张三.xlsx】--> 【结算款_1_张三】--> 【张三】

    (3)由上述得到的人名(name),在字典形式的通讯录中,查找相应的地址(value),即为收件人名称和地址
    (4)利用python中的email模块和smtp模块,登录自己的邮箱账号,再对每个附件,得到的收件人名和地址,添加附件,发送邮件。done

    smtp邮件发送简单描述:
    MUA --> MTA --> MDA --> MTA --> MUA

    1.3 注意事项

    在设计过程中有几点需要注意
    (1) 有时一个邮件地址对应两个人名,此时应该在CSV文件中分为两行存储,而不是将两个人名存为同一个键;
    (2)有账单.xlsx文件,通讯录里却没存储此人记录,程序应该打印提示没有通讯记录的人名,且不能直接退出,要保证员工看到此提示,此第一版程序还有解决此问题;
    (3)此程序发送的邮件内容为纯文本,若要求邮件内容有不同格式(如部分加粗,部分红色),还有小部分需要每次更改的地方(如邮件内容包含当前月份),如何解决?(这就是第二种邮件内容,“预算款”);
    (4)重名的,暂时还没碰到,程序中也没给出解决方案。

    1.4 运行demo

    收件方

     

    收件列表

     

    收件方界面

     

    发件方

    发件方界面

     


    2 程序详解

    2.1 各变量含义

    变量名含义
    sender_host = 'smtp.163.com:25'# 默认服务器地址及端口
    sender_user = 'laoliu******@163.com'# 发件人邮箱地址
    sender_pwd = '******'# 发件人邮箱密码
    sender_name = u'***公司'# 发件人姓名
    attach_path = r'C:\Users***\attchfile'# 附件所在文件夹
    attach_type = ".xlsx"# 附件后缀名,即类型
    addrBook = r'C:\Users***\邮箱联系人表单.csv'# 邮箱通讯录
    content_path = r"C:***\content.txt"# 邮箱正文内容.txt
    mail_content = "***"# 邮箱正文
    addrs = {"张三":"39###@qq.com"}# 邮箱通讯录(字典形式)
    attach_file= " 结算款2张三.xlsx"# 附件的文件名(有后缀)
    att_name = ["结算款1张三","结算款2王二"]# 附件的文件名(无后缀)
    subject = "结算款1张三"# 文件名作为邮件主题
    person_name = ["张三","王二"]# 附件的人名
    recv_addr = addrs["张三"] = "###@qq.com"# (收件人)附件中人名对应的邮件地址

    2.2 各函数及返回值含义

    # 根据输入的CSV文件,获取通讯录:{人名:相应的邮箱地址}
    def getAddrBook(addrBook)                      #返回addrs
    # 根据附件名称中获得的人名,查找通讯录,找到对应的邮件地址
    def getRecvAddr(addrs,person_name)    #  返回 recv_addr
    # 加载邮件内容
    def getMailContent(content_path) 
    # 添加附件-
    def addAttch(attach_file)        # 返回MIMEbase对象 att
    # 发送邮件
    def mailSend()
    

    2.3 源代码

    import os
    import sys
    import csv
    import smtplib
    from email.mime.base import MIMEBase 
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email.utils import formataddr
    from email import encoders
    
    # ========================批量发送邮件测试(二)----邮件内容固定,主题和附件变化=================================
    
    
    # --------------------发送服务器配置---------------
    sender_host = 'smtp.163.com:25'  # 默认服务器地址及端口
    sender_user = 'laoliu***@163.com'  
    sender_pwd = '123456***'
    sender_name = u'上海***公司'
    
    attach_path = r'C:\Users\user\Desktop\MailMaster V1.1\attchfile'   # 附件所在文件夹
    attach_type = ".xlsx"      # 附件后缀名,即类型
    addrBook = r'C:\Users\user\Desktop\MailMaster V1.1\邮箱联系人表单.csv'  # 邮件地址通讯录
    content_path = r"C:\Users\user\Desktop\MailMaster V1.1\content.txt"   # 邮箱正文内容.txt
    
    # --------------根据输入的CSV文件,获取通讯录人名和相应的邮箱地址-------
    
    def getAddrBook(addrBook):
        '''
            @作用:根据输入的CSV文件,形成相应的通讯录字典
            @返回:字典类型,name为人名,value为对应的邮件地址
        '''
        with open(addrBook,'r',encoding='gbk') as addrFile: 
            reader = csv.reader(addrFile)
            name = []
            value = []
            for row in reader:
                name.append(row[0])
                value.append(row[1])
        
        addrs = dict(zip(name, value))
        return addrs
    
    # addrs = {name : value}
    
    # -------------------根据附件名称中获得的人名,查找通讯录,找到对应的邮件地址---------------
    
    def getRecvAddr(addrs,person_name):
        if not person_name in addrs:
            print("没有<"+person_name+">的邮箱地址! 请在联系人中添加此人邮箱后重试。")
            anykey = input("请按任意数字键【0-9】退出程序:")
            if anykey != '':
                time.sleep(1)
                sys.exit(0)
        return addrs[person_name]
    
    
    
    # --------------------加载邮件内容-------------------------
    
    def getMailContent(content_path):
        mail_content = ''
    
        if not os.path.exists(content_path):
            print("文件 content.txt 不存在")
            exit(0)
    
        with open(content_path,'r') as contentFile:
            contentLines = contentFile.readlines()
            if len(contentLines) < 1:
                print("no content in content.txt ")
                exit(0)
            mail_content = "".join(contentLines) # 将其+""转为字符串就好了
        return mail_content 
    
    
    # --------------------添加附件-----------------------------------
    
    def addAttch(attach_file):
        att = MIMEBase('application','octet-stream')  # 这两个参数不知道啥意思,二进制流文件
        att.set_payload(open(attach_file,'rb').read())
        # 此时的附件名称为****.xlsx,截取文件名
        att.add_header('Content-Disposition', 'attachment', filename=('gbk','', attach_file.split("\\")[-1]))
        encoders.encode_base64(att)
        return att
    
    
    
    # ---------------------发送邮件-----------------------
    def mailSend():
        smtp = smtplib.SMTP()   # 新建smtp对象
        smtp.connect(sender_host)
        smtp.login(sender_user, sender_pwd)
    
        for root,dirs,files in os.walk(attach_path):
            for attach_file in files:      # attach_file : ***_2_***.xlsx
                msg = MIMEMultipart('alternative')
                att_name = attach_file.split(".")[0]
                subject = att_name
                msg['Subject'] = subject   # 设置邮件主题
                person_name = subject.split("_")[-1]
    
                addrs = getAddrBook(addrBook)
                recv_addr = getRecvAddr(addrs,person_name)
                
                msg['From'] = formataddr([sender_name,sender_user]) # 设置发件人名称
                # msg['To'] = person_name # 设置收件人名称
                msg['To'] = formataddr([person_name,recv_addr]) # 设置收件人名称   
                mail_content = getMailContent(content_path) 
                msg.attach(MIMEText(mail_content))  # 正文  MIMEText(content,'plain','utf-8')
                attach_file = root+"\\"+attach_file
                att = addAttch(attach_file)
                msg.attach(att)  # 附件
                smtp.sendmail(sender_user, [recv_addr,], msg.as_string())  # smtp.sendmail(from_addr, to_addrs, msg)
                print("已发送: "+person_name+" <"+recv_addr+">")       
            smtp.quit()
    
    
    
    if __name__ == '__main__':
        print("By 小周")
        mailSend()
        anykey = input("请按回车键(Enter)退出程序:")
        if anykey:
            exit(50)
    

    第一版到此,20180830,待更新
    第二版更新,20180904

    • 增加GUI界面;
    • 解决每次连接只能发10封邮件限制;
    • 按任意键退出功能;

    第三版更新,20180909

    • 增加试用期限制

    以上两版更新,请进传送门《小周的Github

    展开全文
  • 此类邮件标题,内容,发送人等基本一致,且需要带附件,而其附件是收件人的隐私性个人信息 若通过上传文件保存到数据库里然后在发邮件的方式,浪费空间和时间。将远程附件写到磁盘在发送则占据磁盘空间,性能不够优...

    业务背景及需求:

    公司需要统一发送同类型的邮件给一批人时,比如发送员工个人薪资表分别至个人邮箱。

    此类邮件标题,内容,发送人等基本一致,且需要带附件,而其附件是收件人的隐私性个人信息

    若通过上传文件保存到数据库里然后在发邮件的方式,浪费空间和时间。将远程附件写到磁盘在发送则占据磁盘空间,性能不够优。

    直接读取远程文件并发送,省掉上传附件的步骤。也不必占用磁盘空间。

    /**
    	 * 发送远程文件邮件
    	 * 
    	 * @param to      收件人
    	 * @param subject 邮件主题
    	 * @param content 邮件内容
    	 * @param smbFile 远程文件
    	 */
    	public void sendRemoteFile2Mail(Mail mail, MailTemplate mailTmpl, SmbFile smbFile) throws Exception {
    
    		MimeMessage message = mailSender.createMimeMessage();
    		MimeMessageHelper helper = new MimeMessageHelper(message, true);
    
    		helper.setFrom(mailTmpl.getMessageSender());
    		helper.setTo(mail.getEmailAddress());
    		helper.setSubject(mailTmpl.getMessageSubject());
    		message.setContent(getMultipart(mailTmpl.getMessageBody(), smbFile));
    
    		if (null != mail.getMailCC() && !"".equals(mail.getMailCC())) {
    			helper.setCc(mail.getMailCC());
    		}
    
    		if (null != mail.getMailBCC() && !"".equals(mail.getMailBCC())) {
    			helper.setBcc(mail.getMailBCC());
    		}
    
    		mailSender.send(message);
    
    	}
    
    	/**
    	 * 获取Multipart对象,包含正文内容、附件、文件名
    	 * 
    	 * @return
    	 */
    	private Multipart getMultipart(String content, SmbFile smbFile) throws Exception {
    		Multipart multipart = new MimeMultipart();
    
    		// 向multipart中添加正文
    		BodyPart contentBody = new MimeBodyPart();
    		contentBody.setContent(content, "text/html;charset=UTF-8");
    		multipart.addBodyPart(contentBody);
    
    		// 向multipart中添加远程附件
    		MimeBodyPart fileBody = new MimeBodyPart();
    		DataSource source = new ByteArrayDataSource(new BufferedInputStream(new SmbFileInputStream(smbFile)),
    				"application/html");
    		fileBody.setDataHandler(new DataHandler(source));
    		fileBody.setFileName(MimeUtility.encodeText(smbFile.getName(), "UTF-8", "B"));
    		multipart.addBodyPart(fileBody);
    
    		return multipart;
    	}

    其中Mail与MailTemplate为自建的Java类,

    邮件模板MailTemplate包含邮件的标题,正文,类型,邮件统一发件人等信息;而Mail包含收件人,抄送人,密抄送人等信息。

    简化版可以为:(最普通的邮件类型,无抄送人等)

    /**
    	 * 发送邮件
    	 * 
    	 * @param mail
    	 * @throws UnsupportedEncodingException
    	 * @throws MessagingException
    	 */
    	public static void sendMail(Mail mail) throws UnsupportedEncodingException, MessagingException {
    		/*
    		 * 动态存入mail params: from:发送人账号 fromName:发送人姓名 subject:邮件主题 to:收件人账号 content:邮件内容
    		 */
    		// 设置邮件内容
    		JavaMailSenderImpl mailSender = createMimeMessage();
    		MimeMessage mimeMessage = mailSender.createMimeMessage();
    		MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
    		messageHelper.setFrom(mail.getFrom());
    		messageHelper.setSubject(mail.getSubject());
    		messageHelper.setText(mail.getContent());
    		messageHelper.setTo(mail.getTo());
    		mailSender.send(mimeMessage);
    	}
    

     

    展开全文
  • C#批量发送、抄送邮件附件

    千次阅读 2019-03-15 18:16:15
    #region 发送邮件 /// /// 发送邮件 /// /// 邮箱登录账号 /// 邮箱密码 or 客户端授权码 /// 件人名称 收件人邮箱列表显示名称 /// 邮件主题 /// 邮件内容 已启用html /// 收件人列表 /// 抄送人列表 /// 附件...
  • 这是一个用java写的邮件附件批量发送系统,JDK为1.6,它可以把一个文件夹中所有文件及子目录的所有文件批量的发送,发送是一个文件一封邮件的形式发送 使用手册在下面的地址哦! ...
  • 应张老师的需求,修改制作了一个可以批量发送附件的电子邮件VBA。目的:给N多人发送电子邮件,而不是抄送模式,并带有对方的称谓。实现:用到Word的邮件合并功能,以及调用Outlook发送邮件。不过VBA我不太懂,只能...
  • python中的email模块可以方便的解析邮件,先上代码#-*- encoding: gb2312 -*-import osimport emaildef mail_to_text(mailname,datapath,index):#由于批处理的邮件包含的附件名称相同,这里传入一个index作为区别符...
  • jmeter之ant配置批量执行用例发送邮件-附件资源
  • 利用javamail批量发送邮件,以qq邮箱为例,延迟发送,带图片和附件。 直接可以运行,修改代码后可以增加配置界提高易用性 如需源代码可站内联系我
  • import smtplib import os from email.message import EmailMessage user = "3**********@qq.com" pwd = "******************" to = "4***********@qq.com" path = r"D:" for file in os.listdir... #print(.
  • 批量发送邮件功能,对高级OFFICE用户来说,第1时间会想到使用WORD的邮件合并功能。但对于需要发送附件来说,邮件合并功能就无能为力,同样还有的限制是用户电脑上没有安装OUTLOOK,同样也不能发送。 今天Excel...
  • 统一将要发送附件放在确定路径下(支持远程路径),附件名称统一以收件人的id命名,访问远程路径权限及路径地址作为参数配置到系统里。
  • 基于vba的批量拆分文件和批量发送邮件程序,适用于批量发送工资条,批量发送机密文件等需要不同人收到不同附件的场合。 说明1,、拆文件模板:请从B1单元格开始粘贴需拆分的内容,然后点击A1单元格中的按钮运行程序。...
  • java利用javamail批量发送邮件,以qq邮箱为例,带图片和附件。 直接可以运行,修改代码后可以增加配置界提高易用性 如需源代码可站内联系我
  • 来个需求,需要给注册用户发送特定的邮件内容,所以就有了这篇博文咯。 准备条件(本文以网易邮箱为例) 邮箱账号必须要开启 SMTP 服务 设置授权码 编码实现 maven <dependency> <...
  • 最近新开学,接到了给老板的本科课程当助教的工作,百十来号人一学期下来得有四五次作业进邮箱里,需要我来统计打分,想想挨个点进去下载附件的过程就头大,于是萌生了写个脚本来统计作业的想法。 其实python里...
  • python批量下载邮件附件

    万次阅读 多人点赞 2018-08-20 18:16:29
    老板让你调查个情况,你把excel表出去了,结果反馈回来的邮件有数百之多,如果一个一个的点开保存,肯定要加班了,让 python 来帮忙吧。 02.批量下载 python 提供的 email 包十分好用,功能完备,搞定我们这个...
  • (1)邮件内容、主题 可以定制,内容可以是富文本,可以带图片和附件 (2)为了避免垃圾邮件拦截,设置为3秒钟一封,每发送100封 停止10分钟 (3)设置后发送账号后,直接运行即可发送,不用编译源代码。 组成及...
  • 1、最近公司实现部分数据统计、...不过发现网上各种文档都是未经过整理,代码写的很不友善,比如发送多人的只能发送前一个邮箱,附件写死不灵活等等,故特写一遍比较记录。主要会遇到的几个问题:1、smtplib.SMTPA...
  • Excel自动批量发送邮件(也可以修改为手动发送),可上传附件,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,865
精华内容 1,946
关键字:

批量发送不同附件邮件