使用c#的System.Net.Mail包、NPOI包实现了基于excel表格的邮箱自定义批量发送

C#批量发送、抄送邮件、附件 #region 发送邮件 /// /// 发送邮件 /// /// 邮箱登录账号 /// 邮箱密码 or 客户端授权码 /// 发件人名称 收件人邮箱列表显示名称 /// 邮件主题 /// 邮件内容 已启用html /// 收件人列表 /// 抄送人列表 /// 附件列表 /// SMTP协议地址 默认163邮箱 可以自行网上查询填写 /// public static bool SendE... 阅读详情

代码已托管GitHub,仓库地址:XietongAuto,包含了NPOI的下载。


C# System.Net.Mail命名空间

官网API地址为:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.mail?redirectedfrom=MSDN&view=netframework-4.8

通过该命名空间,可实现基于POP协议的邮箱自动发送功能,具体的C# DLL后面提供。

        //mailContent是发送邮件的内容,mailSubject是发送邮件的标题,mailTo发送给哪个邮箱
        public static int SendEmail(string mailContent, string mailSubject, string mailTo)
        {
            // 设置例网易的smtp
            string smtpServer = "smtp.qq.com";// "14.18.245.164"; //SMTP服务器
            string mailFrom = "XXXX@qq.com"; //登陆用户名
            string userPassword = "XXXXXXXXX";//登陆密码

            // 邮件服务设置
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.EnableSsl = true;
            smtpClient.UseDefaultCredentials = false;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
            smtpClient.Host = smtpServer; //指定SMTP服务器
            smtpClient.Timeout = 5000;
            smtpClient.Port = 587; //不设置默认为25端口
            smtpClient.Credentials = new System.Net.NetworkCredential(mailFrom, userPassword);//用户名和密码
           
            MailMessage mailMessage = new MailMessage(mailFrom, mailTo); // 发送人和收件人
            mailMessage.Subject = mailSubject;//主题
            mailMessage.Body = mailContent;//内容
            mailMessage.BodyEncoding = Encoding.UTF8;//正文编码
            mailMessage.IsBodyHtml = true;//设置为HTML格式
            mailMessage.Priority = MailPriority.Low;//优先级

            try
            {
                ServicePointManager.ServerCertificateValidationCallback =
                           delegate (Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; };
                smtpClient.Send(mailMessage); // 发送邮件
                return 1;
            }
            catch (SmtpException ex)
            {
                Logger.Create("- 邮件发送异常", ex.ToString());
                return 0;
            }
        }

NPOI of C#

  • 介绍
    NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。其中有Java,C#的实现,具体的C# DLL后面提供。
  • excel读操作
        private int read_excel()
        {
            //文件的绝对路径
            string excelpath = textBox_path.Text;
            IWorkbook wk = null;
            if (File.Exists(excelpath))
            {
                //获取文件后缀,根据后缀.xls或者.xlsx选择不同的IWorkbook
                string extension = System.IO.Path.GetExtension(excelpath);
                FileStream fs = File.OpenRead(excelpath);
                if (extension.Equals(".xls"))
                {
                    //读取xls文件中的数据
                    wk = new HSSFWorkbook(fs);
                }
                else
                {
                    //读取xls文件中的数据
                    wk = new XSSFWorkbook(fs);
                }

                fs.Close();

                ISheet sheet = wk.GetSheetAt(0);
                string sheetname = wk.GetSheetName(0); //根据序号获取sheet的名称
                int rowcount = sheet.LastRowNum;  //获取该sheet的总行数

                for (int j = 2; j <= rowcount; j++)
                {
                    IRow row = sheet.GetRow(j);  //读取当前行数据
                     MessageBox.Show(row.GetCell(2)); //获取该行的第三列的数据
                }
                return count;
            }
            else
            {
                return 0;
            }
        }
  • excel写操作 (基于已有的文件进行写操作,避免设置样式)
        public static void WriteExcel(string path)
        {
            string cell_val1 = "cell_val1";
            string cell_val2 = "cell_val2";

            if (File.Exists(path))
            {
                IWorkbook wk = null;
                string extension = System.IO.Path.GetExtension(path);

                FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                if (extension.Equals(".xls"))
                {
                    //把xls文件中的数据写入wk中
                    wk = new HSSFWorkbook(fs);
                }
                else
                {
                    //把xlsx文件中的数据写入wk中
                    wk = new XSSFWorkbook(fs);
                }
                fs.Close();
                //读取当前表数据
                ISheet sheet = wk.GetSheetAt(0);

                IRow row = sheet.GetRow(1);
                row.Height = 20 * 20;

                ICell c1 = row.CreateCell(1);
                ICell c2 = row.CreateCell(3);
                c1.SetCellValue(cell_val1);
                c2.SetCellValue(cell_val2);

                fs.Close();
                using (FileStream fss = File.Open(@"E:\test.xlsx", FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    wk.Write(fss);
                    fss.Close();
                }
            }
        }
  • excel写操作 ( 全新写入一个excel文件)
//新建Excel文件   
IWorkbook workbook = new HSSFWorkbook();

//新建Sheet表
ISheet sheet = workbook.CreateSheet("Test Result");

//创建单元格样式和字体样式
IFont font = workbook.CreateFont();
ICellStyle style = workbook.CreateCellStyle(); 
   
//设置居中       
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CenterSelection;

//设置内容垂直居中
style.VerticalAlignment = VerticalAlignment.Justify;

//字体加粗     
font.Boldweight = short.MaxValue;

//设置字体大小
font.FontHeightInPoints = 12;

style.SetFont(font);
IFont font1 = workbook.CreateFont(); 
ICellStyle style1 = workbook.CreateCellStyle();
style1.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CenterSelection; 
style1.VerticalAlignment = VerticalAlignment.Justify;

//修改列宽
sheet.SetColumnWidth(1, 18 * 400);
sheet.SetColumnWidth(2, 18 * 256);     
string[] value1 = { "NO", "UUT SN", "Condition"};
//新建行
IRow row = sheet.CreateRow(0);
        
for (int a = 0; a < value1.Length; a++)
{
  //将数组中的值逐一添加到单元格中
  row.CreateCell(a).SetCellValue(Convert.ToString(value1[a]));

 //给每个单元格写入样式

  row.GetCell(a).CellStyle = style;
 }
for (int i = 0; i < 32; i++)
{
  //追加行
   IRow row1 = sheet.CreateRow((sheet.LastRowNum + 1));
   row1.CreateCell(0).SetCellValue(i + 1);
   row1.CreateCell(1).SetCellValue("5473567I008D9193541A1000041");
   row1.CreateCell(2).SetCellValue("Temperature ");
   row1.GetCell(0).CellStyle = style1;
   row1.GetCell(1).CellStyle = style1;
   row1.GetCell(2).CellStyle = style1;
   font1.Boldweight = short.MaxValue;
   style1.SetFont(font1);

  //新建path ,文件处理模式为新增:FileMode.Create,
   FileStream fs = new FileStream(@"C:\Users\lenovo\Desktop\Test Result.xls", FileMode.Create, FileAccess.Write);
  //写入
   workbook.Write(fs);
 //关闭
   fs.Close();
 }
  • excel根据写入的数据类型进行判断的工具类
        /// <summary>
        /// 设置单元格数据类型
        /// </summary>
        /// <param name="cell">目标单元格</param>
        /// <param name="obj">数据值</param>
        /// <returns></returns>
        public static void SetCellValue(ICell cell, object obj)
        {
            if (obj.GetType() == typeof(int))
            {
                cell.SetCellValue((int)obj);
            }
            else if (obj.GetType() == typeof(double))
            {
                cell.SetCellValue((double)obj);
            }
            else if (obj.GetType() == typeof(IRichTextString))
            {
                cell.SetCellValue((IRichTextString)obj);
            }
            else if (obj.GetType() == typeof(string))
            {
                cell.SetCellValue(obj.ToString());
            }
            else if (obj.GetType() == typeof(DateTime))
            {
                cell.SetCellValue((DateTime)obj);
            }
            else if (obj.GetType() == typeof(bool))
            {
                cell.SetCellValue((bool)obj);
            }
            else
            {
                cell.SetCellValue(obj.ToString());
            }
        }

XietongAuto应用

代码仓库地址为:https://github.com/luozhengszj/XietongAuto
使用该应用,可以自动批量发送自定义的邮件(适用与任何的POP协议邮箱),主要具备特点:

  • 该仓库代码可以根据选择的excel文件路径,进行读取excel;
  • 邮件的标题的统一设置;
  • 邮件的内容,可以根据luozhengQAQ+数字,及读取的excel文件的第三行往后、第四列往后的内容进行替换;
  • 当发送邮件的目标邮件错误时,会有日志记录;
  • 该仓库包含了c# npoi的dll文件,直接下载该代码仓库即可看到npoi的文件。

个人博客:Loak 正 - 关注人工智能及互联网的个人博客
文章地址:使用c#的System.Net.Mail包、NPOI包实现了基于excel表格的邮箱自定义批量发送

c#发送邮件带有Excel附件,Excel的后缀名为xls,邮件body可以展示Excel的所有数据和行头,使用类库.NET Framework项目 rowNum++) // 从第二行开始是数据行。// 专门用于.xls文件。// 开始构建HTML表格。if (firstRow.RowNum == 0) // 假设第一行为标题行。// 读取Excel文件并转换为HTML插入邮件正文。// 将.xls格式的Excel文件内容转换为HTML字符串。// Excel文件路径(.xls格式)// 添加Excel文件作为附件。// 设置SMTP客户端。// 使用NPOI读取Excel。 阅读详情

相关推荐

C#邮件发送与群发高级实战指南

本文还有配套的精品资源,点击获取 简介:本文深入探讨了C#编程语言在邮件发送功能中的应用,重点介绍了群发邮件以及如何添加附件。文章详细解释了使用***.Mail命名空间下的SmtpClient和MailMessage类进行邮件对象创建、SMTP服务器配置、邮件发送等操作的步骤。同时,还探讨了群发邮件的两种实现方法,并提及了群发优化策略、错误处理和多线程发送等高级特性。开发者...

weixin_36235398的博客 1665

System.net.mail 使用ssl发送邮件失败

我采用了.net 的自带组件System.Net.Mail发送邮件,主要是在客户注册网站成功的时候发条欢迎邮件,最近邮件无法发送了,看了下腾讯smtp邮件配置,所有的邮件发送都换成ssl了,之前用的是25端口,现在换成了465或587,于是修改代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 MailMessag...

weixin_34116110的博客 694

C#实现邮件发送功能的源代码大全

C#(发音为 "看")是一种由微软开发的面向对象的、类型安全的编程语言。自从.NET框架发布以来,C#一直作为微软的主要开发语言,并被广泛应用于企业级应用、Web服务和游戏开发等多个领域。System.Net.Mail是.NET Framework提供的一个命名空间,用于处理电子邮件的创建、发送以及接收。它是基于SMTP协议工作的,允许开发人员以一种简单且直接的方式在应用程序中整合邮件功能。System.Net.Mail命名空间提供了多种类和接口,这些类和接口是处理邮件功能所必需的。

weixin_42576410的博客 1247

生成excel流文件,并发送邮件附件

List titleList = Arrays.asList("运营商", "项目", "企业名称", "预警类别", "预警说明", "预警等级","预警时间","预警状态");messageHelper.addAttachment(MimeUtility.encodeWord("预警内容.xls","utf-8","B"),file);// // 3.6、设置列宽。

qq_57548915的博客 537

使用C# .NET在Outlook中自动化创建和发送邮件

Microsoft Outlook 是一款流行的电子邮件客户端和PIM(个人信息管理)应用程序。它提供了丰富的对象模型,允许开发者通过编程方式与Outlook应用程序交互。通过Outlook对象模型,可以访问邮件、联系人、日历项、任务等信息,并进行操作。通常,在自动化发送邮件的过程中,为用户提供最终确认的机会是一个好的实践,以防止错误的邮件被发送出去。可以通过弹出一个确认对话框来实现这一功能。// 示例代码:用户确认发送else在上述代码中,我们先调用了。

weixin_30591519的博客 1519

C#.NET实现邮件发送功能详解

电子邮件作为企业级应用中不可或缺的通信方式,广泛应用于通知、营销、系统告警等多个场景。在C#.NET平台中,开发者可以通过命名空间提供的类库实现高效、安全的邮件发送功能。该命名空间核心包括SmtpClientAttachment等类,分别用于配置SMTP服务、构建邮件内容以及添加附件。本章将从整体架构出发,介绍C#.NET邮件发送的基本流程与关键类,帮助开发者快速理解其工作机制,为后续章节中深入学习配置、优化与实战应用打下坚实基础。

weixin_32661831的博客 1186

C#批量发送邮件程序

Form1.cs//c#批量发送邮件程序.远程抓取网页源代码,作为邮件内容.首先批量从文本文件中读取客户邮件地址,然后发送 安装network平台,,添加引用 System.Web.Dll using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System....

guanhuaing 562

傅里叶光学(1)

傅里叶光学,可以看作是通信理论中傅里叶变换等一系列数学思想以及系统理论与光学(主要是衍射光学)相结合的产物关于傅里叶光学的应用领域,本节介绍了成像,当然事实上不可能仅限于成像,经典的还如激光散斑的一些应用,干涉计量,还有傅里叶变换光谱学等等。最后总结一下,傅里叶光学我认为可以看做一个工具,对于任意的系统,它能给出一些数学思想与物理原理进行解释和分析,找出系统的扰动和响应的关系,或者说根据扰动和响应,来研究或者设计一个系统。

m0_53607446的博客 1690

C#发送邮件MailMessage 类示例

命名空间: System.Net.Mail 程序集: System.Net.Mail.dll //示例 public static void CreateMessageWithAttachment(string server) { // Specify the file to be attached and sent. // This example assumes that a file named Data.xls exists in the // current working

sclibingqing的博客 4756

音频DSP开发中的‘隐藏关卡’:那些SigmaStudio未公开的模块计算秘籍

本文深入探讨音频DSP开发中SigmaStudio未公开的模块计算秘籍,重点解析动态范围控制、均衡器参数映射和混响算法优化等核心模块计算公式。通过实际案例揭示如何利用这些非官方技巧提升音频质量与系统性能,为ADI DSP开发者提供宝贵的实战经验。

water的专栏 912

从压电传感器到示波器:手把手教你用CA3140搭建电荷放大器(含PCB布局与调零技巧)

本文详细介绍了如何使用CA3140运算放大器搭建专业级电荷放大器,从压电传感器信号特性分析到PCB布局与调零技巧,全程实战演示。重点解析了CA3140的低通滤波器设计、反馈网络参数计算及抗干扰增强方案,帮助电子爱好者高效实现微弱电荷信号的稳定转换与测量。

weixin_31355483的博客 600

启动应用程序出现mprmsg.dll找不到问题解决

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mprmsg.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现mprmsg.dll丢失要怎么解决?

wbcmbfy的博客 3210

从零配置Archery:手把手教你用Docker部署多数据库审核系统(MySQL/PostgreSQL/ClickHouse)

本文详细介绍了如何从零开始使用Docker部署Archery多数据库审核系统,涵盖MySQL、PostgreSQL和ClickHouse的配置与整合。文章提供了生产级Docker-compose配置、审核规则定制、工单流程设置以及企业微信通知集成等实战指南,帮助团队构建统一的企业级SQL审计平台,提升数据库操作规范与安全。

e4f5g6h7的博客 941

C#数据库转表格作为附件发送邮件。datatable转excel添加附件

C#数据库转表格作为附件发送邮件。datatable转excel添加附件,新手向

weixin_a18297652723的博客 2071

【Python】SimpleITK使用笔记

1. 概念 1.1 nii格式 1.2 SimpleITK 1.3 SimpleITK 图像 2. 基本操作 2.1 常见属性 2.1 读取和保存图像 2.2 SimpleITK图像数据和Numpy矩阵数据之间的转换

See_Star的博客 7900

Webug4.0 打靶笔记

一、Webug 的安装 (1)基本信息 WeBug 名称定义为”我们的漏洞”靶场环境 ,基础环境是基于 PHP/mysql 制作搭建而成,中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中。在 webug3.0 发布后的四百多天 226安全团队终于在大年初二发布了 webug 的 4.0 版本。 (2)虚拟机的安装 最新超详细VMware虚拟机下载与安装_隐

m0_60716947的博客 6128

C#绘制表格并发送邮件功能

public bool SendMail(string code, DataTable dt) { string strAutoClearToMailList = "";//自动清算通知邮箱列表 DataRow drTemp =null; //获取发送邮箱 if("1062".Equals(code)) GetAlter("REPORT", "Report_1062", ...

AndroidOrCsharp 3191

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)新增用户和用户角色权限

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)查看用户权限、新增用户和用户角色权限。

念兮为美 7479

C#邮件发送 批量发送邮件 发送邮件嵌入图片 添加附件

C#邮件发送 批量发送邮件 发送邮件嵌入图片 添加附件

人生若南柯一梦 4700

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践

本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 276

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

.NET C# 群发 HTML格式 带附件 中文发送者 密送 抄送 的邮件

 群发邮件,对于网站和一些推广应用,可谓不可或缺的“技能” 。对于.NET而言,从2.0开始,发邮件已经是一件非常easy 的事了。下面我给出一个用C#群发邮件的实例,做了比较详细的注解,希望对有需要的朋友有所help。看了这篇BLOG,如果你还不会用.NET发邮件,要么你去死,要么还是你去死 Let’s Go !!// 引入命名空间using System.Net;u

朩冰雲的专栏 1114

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#怎么实现批量邮件发送 C#如何用MailKit批量发送个性化邮件和HTML格式邮件【网络】

因为默认没开并发控制,100 封邮件直接扔进 SendAsync,SMTP 服务器会拒绝连接或触发限流。用 SemaphoreSlim 控制并发数(比如最多 5 个并发连接)每封邮件单独建 MimeMessage,别复用对象——MimeMessage 不是线程安全的避免在循环里反复创建 SmtpClient,复用一个实例(但注意它不支持多线程同时 SendAsync)连接要显式 Connect + Authenticate,别依赖自动重连怎么给每封邮件塞不同的收件人和 HTML 内容?

m0_37761823的博客 216

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# 邮件批量发送程序

前一段时间使用 System.Net.Mail.MailMessage 类写了一个邮件批量发送的程序,在调试和测试中遇到的一些问题和大家共享一下,希望能够对大家有所帮助。用MailMessage类发送邮件的方法有很多,但我推荐使用异步方式发送邮件,尤其是发送批量邮件,这是因为程序在向邮件服务器提交多个邮件时,同步方式是等到上一封邮件提交完成并且有发送状态返回,才开始发送下一封,如果

yanfang19850405的专栏 4175

C# 读取Execl文件3种方法

ADO.NET的数据访问对象有Connection,Command、DataReader和DataAdaper等,由于每种.NET Data Provider都有自己的数据访问对象,因此他们的使用方式相似。这里主要介绍OLEDB.NET Data Provider的各种数据访问对象的使用。

Z_W_H_的博客 1万+

c#邮件发送,将Table转换成表格的案例分享,超实用

public string ConvertDatatableToHtml(DataTable filedt) //转换成HTML格式发送 { string desc = ""; if (filedt != null && filedt.Rows.Count != 0) { ...

qq_25763631的博客 2184

C# 读取Excel的几种常见方式及实现步骤

读取Excel的几种常见方式为:使用 Microsoft Office Interop Excel 库,使用 OLEDB 数据库连接方式,使用 EPPlus 库三种方式,在以上三种方法中,第一种和第二种方法需要安装额外的依赖库,并且性能较低;而第三种方法虽然需要引入 EPPlus 依赖库,但性能较高且使用方便。具体选择哪种方式可以根据自己的实际情况来考虑。

beenles的博客 1万+
上一篇: 流畅的Python笔记(一)—python的数据模型及python风格的纸牌
下一篇: Python paramiko模块学习记录、封装类的使用及交换机配置批量备份程序的实现
luoz_python
博客等级 码龄10年 57粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值