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负责构造邮件, ...
随机推荐
- a标签的href劫持,做判断后在跳转
$.ajax({ type: "POST", url: "/resource/logincheck", data: {id: id}, success: fun ...
- Oracle RAC OCR 与健忘症
OCR就好比Windows的一个注册表,存储了所有与集群,RAC数据库相关的配置信息.而且是公用的配置,也就是说多个节点共享相同的配置信息.因此该配置应当存储于共享磁盘.本文主要基于Oracle 10 ...
- Android高手进阶教程(五)之----Android 中LayoutInflater的使用!
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weizhulin.blog.51cto.com/1556324/311450 大 ...
- hdu 4927 java求组合数(大数)
import java.util.Scanner; import java.math.BigInteger; public class Main { private static int [] a = ...
- robotframework学习
下载地址: https://pypi.python.org/pypi/robotframework Installation If you already have Python with pip i ...
- 容器的范围 .xml
pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...
- 华丽的bootstrap3碰到土鳖IE6
之前由于看好很容易上手的bootstrap,然后用这个框架写了个网站,对于不会美工和细致设计的攻城师来说,bootstrap是个界面设计的瑞士军刀,三下五除二就能搞定个不算太丑的页面. 吭哧吭哧工作了 ...
- c/c++ 数字转成字符串, 字符串转成数字
c/c++ 数字转成字符串, 字符串转成数字 ------转帖 数字转字符串: 用C++的streanstream: #include <sstream> #Include <str ...
- gcc 安装
最近在中标麒麟上面工作,结果发现上面gcc都没有,没有办法只好自己装(PS 中标麒麟:怪我咯) 资源:http://download.csdn.net/detail/jiahuat/8715413 按 ...
- php 解压 .gz 文件
在百度搜索到的 PharData 类和 ZipArchive 都是解压不了 .gz 的文件的,后来在 google 搜索到解决方法,问题解决. try { $phar = new PharData($ ...