需要用到的命名空间:

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发送邮件的更多相关文章

  1. php用smtp发送邮件

    php用smtp发送邮件 1.其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,大家可以去网上下载. 这是一个 ...

  2. phpmailer,smtp发送邮件实例(转)

    一,用phpmailer发送邮件 查看复制打印? <?php   include "class.phpmailer.php";    //包函邮件发送类      //邮件发 ...

  3. python通过SMTP发送邮件失败,报错505/535

    python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission')    我们使用pyth ...

  4. linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co

    https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...

  5. python大法好——Python SMTP发送邮件

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

  6. 运维监控-Zabbix Server 使用QQ SMTP发送邮件报警及定制报警内容

    运维监控-Zabbix Server 使用QQ SMTP发送邮件报警及定制报警内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客采用腾讯邮箱,想必大家都对QQ很了解,所以 ...

  7. gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例)

    gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例) 首先祭出官网文档链接:https://docs.gitlab.com/omnibus/settings/smtp.html 其实 ...

  8. PHP 通过带SSL的SMTP 发送邮件的处理

    客户端与SMTP服务器的通讯, 是通过固定的命令以及返回编号完成的. 发送Email, 需要经过的步骤有创建socket (区分带ssl, 还是不带ssl)执行命令, 并检查返回值是否与预期一致, 不 ...

  9. 阿里云服务器用smtp发送邮件返失败

    阿里云使用SMTP发送邮件失败,因为阿里云服务器屏蔽了25端口,所以发送不成功,解决办法改用587发送QQ邮件,且必须使用SSL,否则不成功. 经测试QQ的465,995不能使用. https://b ...

  10. SMTP发送邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

随机推荐

  1. Python [Leetcode 345]Reverse Vowels of a String

    题目描述: Write a function that takes a string as input and reverse only the vowels of a string. Example ...

  2. 【JavaScript学习笔记】点击消失

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  3. 【英语】Bingo口语笔记(23) - 万圣节系列

    jack-o-lantern 杰克灯(南瓜灯) spooky 幽灵般的

  4. 查看Linux下端口占用情况的命令

    在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...

  5. linux shell中的 #!/bin/bash

    #!/bin/bash是指此脚本使用/bin/bash来解释执行. 其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径. bash只是shell的一种,还有很多其它shell,如:sh ...

  6. 关于TCP/UDP缓存

    1.修订单个socket的缓冲区大小:通过setsockopt使用SO_RCVBUF来设置接收缓冲区,该参数在设置的时候不会与rmem_max进行对比校验,但是如果设置的大小超过rmem_max的话, ...

  7. effective java 笔记1--序言

    一.序言 程序设计的几条基本原则: 1.清晰性和简洁性最为重要,模块的用户永远也不应该被模块的行为所迷惑,所以写良好的注释是必需的. 2.模块要竟可能小,但也不能太小,好一个深奥的哲学问题. 3.代码 ...

  8. Java并发编程-关卡

    CyclicBarrier 直译过来叫循环栅栏,它主要的方法就是一个:await().await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程.当计数减至0时,阻塞解除,所有在此 Cycli ...

  9. SoapUI Property

    1. Test Suite(Case) Property 选择Test Suite(Case),switch to Custom properties 在request中的引用方式: ${[scope ...

  10. JSON 教程学习进度备忘

    书签:跳过:另外跳过的内容有待跟进 __________________ 学习资源:W3School. _________________ 跳过的内容: 1. ______________ 知识点:1 ...