C#使用SMTP发送邮件
需要用到的命名空间:
using System.Net.Mail;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections;
using System.ComponentModel;
发送邮件的方法如下:
其中处理附件的代码实现的效果是自动根据文件扩展名获得ContentType值,且发送的附件名与上传的文件名一致。
/// <summary>
/// 发送邮件给相关人
/// </summary>
/// <param name="sendToList">收件人列表(以分号分隔)</param>
/// <param name="attachment">附件路劲(服务器端路劲)</param>
/// <param name="subject">邮件主题</param>
/// <param name="mailBody">邮件内容</param>
/// <param name="sysEmail">使用的系统邮箱</param>
/// <param name="sysEmailPwd">系统邮箱密码</param>
/// <param name="smtpUrl">系统邮箱SMTP的URL</param>
/// <returns>返回空字符串代表成功,否则为错误信息字符串</returns>
public string SendEmail(string sendToList, Hashtable attachment, string subject, string mailBody,
string sysEmail, string sysEmailPwd, string smtpUrl)
{
try
{
string strReturn = "";
//return strReturn; MailMessage mail = new MailMessage(); sendToList = sendToList.Trim().TrimEnd(';');
if (sendToList.Length == )
{
return "收件人地址为空";
} mail.From = new MailAddress(sysEmail);
foreach (string to in sendToList.Split(';'))
{
if (Regex.IsMatch(to, @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"))
{
mail.To.Add(to);
}
else
{
strReturn += string.Format("{0}邮箱格式错误,未发送\\n", to);
}
} if (strReturn == "")
{
//mail.IsBodyHtml = true;
//mail.Body = mailBody.Replace("\n\r", "<br />");
mail.IsBodyHtml = false;
mail.Subject = subject;
mail.Body = mailBody;
mail.SubjectEncoding = Encoding.GetEncoding("UTF-8");
mail.BodyEncoding = Encoding.GetEncoding("UTF-8"); if (attachment.Count > )
{
//mail.Body = mailBody +"\n\r随邮件带附件:";
string filePath;
string fileOldName;
//FileInfo fileInfo; foreach (System.Collections.DictionaryEntry objDE in attachment)
{
filePath = objDE.Key.ToString();
fileOldName = objDE.Value.ToString();
if (File.Exists(filePath))
{
//fileInfo = new FileInfo(filePath);
//if (fileInfo.Length / 1024 >= 10240)//大于10MB
//{
// mail.Body += "大附件:<a href='" + System.Web.HttpContext.Current.Request.Url.Host + "/UploadedFiles/" +
// filePath.Split(new string[] { "\\UploadedFiles\\" }, StringSplitOptions.None)[1] + "'>" + fileOldName + "</a>";
// continue;
//} System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType();
contentType.Name = fileOldName;
contentType.MediaType = GetContentTypeForFileName(filePath);
Attachment mailAttach = new Attachment(new FileStream(objDE.Key.ToString(), FileMode.Open, FileAccess.Read, FileShare.Read), contentType);
//Attachment mailAttach = new Attachment(objDE.Key.ToString());
mail.Attachments.Add(mailAttach);
}
}
} SmtpClient smtp = new SmtpClient(smtpUrl);
smtp.Credentials = new System.Net.NetworkCredential(sysEmail, sysEmailPwd); //smtp.Port = 25;
//smtp.Timeout = 180000;//3分钟,默认为100秒
//smtp.EnableSsl = false; smtp.Send(mail); //smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
//smtp.SendAsync(mail, "异步发送邮件"); mail.Dispose();
} return strReturn;
}
catch (Exception ex)
{
logger.Error("【邮件发送】异常描述:\t" + ex.Message);
logger.Error("【邮件发送】异常方法:\t" + ex.TargetSite);
logger.Error("【邮件发送】异常堆栈:\t" + ex.StackTrace);
}
}
获取文件ContentType值的方法:
/// <summary>
/// 获取文件ContentType值
/// </summary>
/// <param name="fileName">文件完整路劲</param>
/// <returns>文件ContentType值</returns>
private string GetContentTypeForFileName(string fileName)
{
string ext = System.IO.Path.GetExtension(fileName);
using (Microsoft.Win32.RegistryKey registryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext))
{
if (registryKey == null)
return null;
string value = registryKey.GetValue("Content Type").ToString();
return (value == null) ? string.Empty : value;
}
}
C#使用SMTP发送邮件的更多相关文章
- php用smtp发送邮件
php用smtp发送邮件 1.其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,大家可以去网上下载. 这是一个 ...
- phpmailer,smtp发送邮件实例(转)
一,用phpmailer发送邮件 查看复制打印? <?php include "class.phpmailer.php"; //包函邮件发送类 //邮件发 ...
- python通过SMTP发送邮件失败,报错505/535
python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 我们使用pyth ...
- linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co
https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...
- python大法好——Python SMTP发送邮件
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...
- 运维监控-Zabbix Server 使用QQ SMTP发送邮件报警及定制报警内容
运维监控-Zabbix Server 使用QQ SMTP发送邮件报警及定制报警内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客采用腾讯邮箱,想必大家都对QQ很了解,所以 ...
- gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例)
gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例) 首先祭出官网文档链接:https://docs.gitlab.com/omnibus/settings/smtp.html 其实 ...
- PHP 通过带SSL的SMTP 发送邮件的处理
客户端与SMTP服务器的通讯, 是通过固定的命令以及返回编号完成的. 发送Email, 需要经过的步骤有创建socket (区分带ssl, 还是不带ssl)执行命令, 并检查返回值是否与预期一致, 不 ...
- 阿里云服务器用smtp发送邮件返失败
阿里云使用SMTP发送邮件失败,因为阿里云服务器屏蔽了25端口,所以发送不成功,解决办法改用587发送QQ邮件,且必须使用SSL,否则不成功. 经测试QQ的465,995不能使用. https://b ...
- SMTP发送邮件
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...
随机推荐
- 《摇滚南京》——"人生下来就是孤独"
昨天是纪录片<摇滚南京>东南大学站的展映分享会 我不是一个摇滚迷,作为学渣狗看论文.码代码的时候会塞个耳机,平时其实民谣听得更多一点,摇滚觉得有点高大上.所以整好趁着学校有活动,也跟着高大 ...
- LOL-无双剑姬我的最爱
LOL打了几年了,是一种娱乐的好方式,但是一个人玩不开黑就很无聊.这游戏最开始我玩的时候无论是赢是输就无所谓的,很高兴的.但是现在输了反而很气愤.也不知道为什么,所以很少玩了. 剑姬对反甲:如果对方出 ...
- Cadence Allegro导网表的错误问题解决
在Allegro导入网表的时候,有时候会出现这样一个错误问题,如下: ------ Oversights/Warnings/Errors ------ #1 ERROR(SPMHNI-235): ...
- SQL利用Case When Then多条件判断
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 WHEN 条件4 THEN 结果4 ....... ...
- Android的IPC机制(一)——AIDL的使用
综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道. ...
- 嵌入式 Linux下编译并使用curl静态库
#x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...
- 软件测试——boost单元测试 C++
分类: 1. 下载安装Boost 2. 在vs2010 中设置 工具->选项->vc++目录 设置包含文件目录:找到解压的boost文件夹eg:C:\boost_1_43_03. ...
- 长轮询和Comet
长轮询方式是由前端定时发起AJAX请求,若请求到数据则把数据显示出来. comet方式是由客户端与服务器端发起一个长连接,然后客户端通过监听事件的方式,来对服务器端返回的数据作出响应和处理. 实时性要 ...
- Selenium2Library系列 keywords 之 _SelectElementKeywords 之 select_from_list_by_value(self, locator, *values)
def select_from_list_by_value(self, locator, *values): """Selects `*values` from list ...
- Java之--Java语言基础组成—函数
Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...