asp.net发送邮件时在正文中插入图片

#region 发送邮件
        /// <summary>
        /// 通过附件发送邮件
        /// </summary>
        /// <param name="emailFrom">发送人邮箱地址</param>

/// <param name="files">图片地址</param>
        /// <param name="emailFromName">发送人姓名</param>
        /// <param name="zsrList">收件人集合</param>
        /// <param name="csrList">抄送人集合</param>
        /// <param name="arrFilePath">附件路径</param>
        /// <param name="mailSubject">主题</param>
        /// <param name="mailBody">正文内容</param>
        /// <returns></returns>
        public static bool SendEmail(string emailFrom, string[] files, string emailFromName, IList<CSR> zsrList, IList<CSR> csrList, ArrayList arrFilePath, string mailSubject, string mailBody)
        {
            MailMessage Email = new MailMessage();
            try
            {
                MailAddress EmailFrom = new MailAddress(emailFrom, emailFromName); //创建发件人邮箱地址对象
                Email.From = EmailFrom; //指定发件人
                Email.CC.Add(EmailFrom); //将发件人作为抄送人发一份
                for (int i = 0; i < zsrList.Count; i++) //循环添加主送人邮箱地址对象
                {
                    MailAddress zsrAddr = new MailAddress(zsrList[i].EMAIL, zsrList[i].NAME);
                    Email.To.Add(zsrAddr);
                }
                for (int i = 0; i < csrList.Count; i++) //循环添加抄送人邮箱地址对象
                {
                    MailAddress csrAddr = new MailAddress(csrList[i].EMAIL, csrList[i].NAME);
                    Email.CC.Add(csrAddr);
                }
}
            catch
            {
                return false;
            }
Email.IsBodyHtml = true;
            Email.BodyEncoding = System.Text.Encoding.UTF8;
            Email.Body += mailBody;
            for (int i = 0; i < files.Length; i++)
            {
                System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(files[i]);
                Email.Attachments.Add(attachment);
                Email.Body += "<img src=\"cid:" + attachment.ContentId + "\"/>";
            }
Email.Priority = MailPriority.High;
            //邮件主题
            Email.Subject = mailSubject;
            Email.SubjectEncoding = Encoding.GetEncoding(936);
//邮件附件
            for (int i = 0; i < arrFilePath.Count; i++)
            {
                string file = arrFilePath[i].ToString(); //附件路径
                Attachment data = new Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
                // Add time stamp information for the file.
                System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(file);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
                // Add the file attachment to this e-mail message.
                Email.Attachments.Add(data);
            }
            SmtpClient Client = new SmtpClient("172.30.1.13");
            Client.UseDefaultCredentials = false;
            Client.Credentials = new System.Net.NetworkCredential("shoa", "shnetweb.1234");
            Client.DeliveryMethod = SmtpDeliveryMethod.Network;
try
            {
                Client.Send(Email);
            }
            catch (SmtpFailedRecipientsException ex)
            {
                for (int i = 0; i < ex.InnerExceptions.Length; i++)
                {
                    SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
                    if (status == SmtpStatusCode.MailboxBusy || status == SmtpStatusCode.MailboxUnavailable)
                    {
                        //Response.Write("Delivery failed - retrying in 5 seconds.");
                        System.Threading.Thread.Sleep(5000);
                        Client.Send(Email);
                    }
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                for (int i = 0; i < Email.Attachments.Count; i++) //释放占用excel资源
                {
                    Email.Attachments[i].Dispose();
                }
            }
            return true;
        }
        #endregion

转载于:https://www.cnblogs.com/shengtianlong/archive/2010/09/16/1828173.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式(1)工厂模式(Factory模式)

工厂模式定义&#xff1a;提供创建对象的接口。 为何使用工厂模式 工厂模式是我们最常用的模式了&#xff0c;著名的Jive论坛&#xff0c;就大量使用了工厂模式&#xff0c;工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用&#xff1f;因为工厂模式就相当于…

cmd使用另一个Oracle的sid,(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法...

(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法(2014-04-30 10:57:17)1、 开始&#xff0d;&#xff1e;设置&#xff0d;&#xff1e;控制面板&#xff0d;&#xff1e;管理工具&#xff0d;&#xff1e;服务 停止所有Oracle服务。2、 开始&#xff0…

$Poj1952\ $洛谷$1687\ Buy\ Low,Buy\ Lower$ 线性$DP+$方案计数

Luogu Description 求一个长度为n的序列a的最长下降子序列的长度,以及这个长度的子序列种数,注意相同的几个子序列只能算作一个子序列. n<5000,a[i]不超过long范围 Sol 求最长下降子序列的长度: 1.f[i]表示以a[i]结尾的最长下降子序列长度 2.f[i]表示以i结尾的最长下降子序列…

阻塞和非阻塞通信

同步、异步、阻塞和非阻塞是几种基本的sockets调用方式&#xff0c;也是在进行网络编程时需要理解和区分的基本概念之一。关于这方面的文章和讨论相当丰富&#xff0c;这里着重讨论其中两个比较容易混淆的两个&#xff0c;即非阻塞与异步的关系。 先还是简单所列一下几中调用方…

我和《Visual c++2013入门经典(第7版)》的那些事

前言 笔者今天有幸看到了Visual c2013入门经典&#xff08;第7版&#xff09;&#xff0c;这一本书&#xff0c;回想之前看过些书的2010的版本&#xff0c;陪伴我渡过了漫长的C基础学习之路&#xff0c;下面我将讲述对《Visual c2013入门经典&#xff08;第7版&#xff09;》看…

oracle中的mount是什么意思,oraclenomountmountopen直接的关系

startup nomount startup mount startup open (startup的默认选项) 其他常用的参数&#xff1a;read only ,read write ,force,restrict 这些参数可以一起使用,比如 startup 与 startup open read write 是一样的效果。 Oracle的启动过程&#xff1a;启动实例 - 装载数据库 - 打…

JavaScript中的各种宽高以及位置总结

在javascript中操作dom节点让其运动的时候&#xff0c;常常会涉及到各种宽高以及位置坐标等概念&#xff0c;如果不能很好地理解这些属性所代表的意义&#xff0c;就不能理解js的运动原理&#xff0c;同时&#xff0c;由于这些属性概念较多&#xff0c;加上浏览器之间 实现方式…

C# 制作Com组件:java调用.net DLL的方法

本文将详细为大家介绍一个java调用.net DLL的方法&#xff0c;以实现特殊的客户的特殊要求&#xff1a;“在Java项目中必须使用其提供的用.net写的DLL加密机制&#xff01;” 环境与工具&#xff1a; ◆.net framework 3.5 C# ◆java jdk1.5&#xff0c; Tomcat 5.5 ◆jacob-1.…

MySQL 8.0索引合并

简介参考https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html#index-merge-intersection。索引合并是通过多个range类型的扫描并且合并它们的结果集来检索行的。仅合并来自单个表的索引扫描&#xff0c;而不是跨多个表的索引扫描。合并会产生底层扫描的三种…

linux开通80端口命令,Linux iptables开启80端口

Linux下安装好apache的时候访问IP 发现无法访问!以为安装失败了&#xff0c;于是测试apache 监听的端口80#netstat -lnt |grep 80tcp 0 0 :::80 :::* LISTEN安装成功了&#xff01;想到用本机telnet IP 80不通- - 但…

linux匿名页 文件页,文件页和匿名页

文件页和匿名页文件页内存回收, 也就是系统释放掉可以回收的内存, 比如缓存和缓冲区, 就属于可回收内存. 它们在内存管理中, 通常被叫做文件页 (File-backed Page). 大部分文件页, 都可以直接回收, 以后有需要时, 再从磁盘重新读取就可以了.脏页那些被应用程序修改过, 并且暂时…

第十五周学习总结

学习时间15h      代码行数400行博客数2篇学习内容这周主要做了php大作业的项目&#xff0c;添加了购物车和订单&#xff0c;管理员管理订单的功能&#xff0c;主要运用了session来储存纸&#xff0c;再用session时&#xff0c;必须前面添加session_star();且前面不能有输…

科学家研究:生女有撇步 多钙少碰香蕉

&#xff08;联合早报网讯&#xff09;台湾自由时报报道&#xff0c;科学家研究指出&#xff0c;育龄妇女若想生女孩&#xff0c;应该戒吃香蕉&#xff0c;多吃豆类与硬起司&#xff0c;以及排卵前后数天禁欲&#xff1b;要是能恪守上述规范&#xff0c;日后弄瓦而非弄璋的成功…

服务端配置实现AJAX跨域请求

2019独角兽企业重金招聘Python工程师标准>>> 一直以为AJAX跨域是无法逾越的鸿沟&#xff0c;最近发现原来在服务端可以通过发送header信息来允许AJAX跨域请求。 PHP代码示例&#xff1a; header(Access-Control-Allow-Origin:*); header(Access-Control-Allow-Hea…

linux系统的运行定义在,Linux系统运行级管理

运行级的概念来自SystemV运行级别将启动过程分成不同的集合每个集合包含一组脚本当init程序切换运行级到对应的级别时相应的脚本就被触发切换运行级可以通过执行init[级别号]完成(比如在Linux中runlevel代表reboot所以执行init就会引起系统重新启动)下面是一个标准的Linux的/et…

【翻译】怎样使用css制作迷人的button

英文原文&#xff1a;How to make sexy buttons with css 作者&#xff1a;Alex 这是一个教程&#xff0c;作者Alex一步步地叫我们怎样使用css来制作一个迷人的按钮&#xff0c;看后觉得挺好&#xff0c;很想大家都看看&#xff0c;翻译的可能稍有不妥&#xff0c;望谅解…… 这…

猜数游戏,随机目标数字,直到猜中退出

/* 猜数游戏&#xff08;其三&#xff1a;目标数字是0~999的随机数&#xff09;*/#include <time.h> #include <stdio.h> #include <stdlib.h>int main(void) {int no; /* 读取的值 */int ans; /* 目标数字 */srand(time(NULL)); /* 设定随…

Linux内核分析(三)----初识linux内存管理子系统

原文:Linux内核分析&#xff08;三&#xff09;----初识linux内存管理子系统Linux内核分析&#xff08;三&#xff09; 昨天我们对内核模块进行了简单的分析&#xff0c;今天为了让我们今后的分析没有太多障碍&#xff0c;我们今天先简单的分析一下linux的内存管理子系统&#…

linux交叉编译静态,使用静态链接在Linux上交叉编译Windows的GLUT项目

我正在尝试交叉编译这个最小的GLUT程序&#xff1a;#include int main(int argc, char **argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("Cross-compile testing");glutMainLoop();return 0;}我使用的…

Python笔记(十五)_异常处理

try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例&#xff1a; >>>try: sum 11 fopen(未定义文件.txt) print(f.read()) f.close except OSError as reason: print(文件出错啦&#xff01;错误原因&#xff1a; str(reason))…