using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail;
using System.Net.Sockets;
using System.Text; namespace HR.Common
{
#region SMTP Client
public class SMTPClient : TcpClient
{
/// <summary>
/// 是否链接
/// </summary>
/// <returns></returns>
public bool isConnected()
{
return Active;
} /// <summary>
/// 向服务器发送指令
/// </summary>
/// <param name="Command">指令内容</param>
public void SendCommandToServer(string Command)
{
NetworkStream ns = this.GetStream();
byte[] WriteBuffer = null;
WriteBuffer = new byte[Command.Length];
WriteBuffer = Encoding.Default.GetBytes(Command);
ns.Write(WriteBuffer, , WriteBuffer.Length);
return;
} /// <summary>
/// 返回服务器处理结果
/// </summary>
/// <returns></returns>
public string GetServerResponse()
{
int StreamSize;
string ReturnValue = "";
byte[] ReadBuffer;
NetworkStream ns = this.GetStream(); ReadBuffer = new byte[];
StreamSize = ns.Read(ReadBuffer, , ReadBuffer.Length);
if (StreamSize == )
{
return ReturnValue;
}
else
{
ReturnValue = Encoding.Default.GetString(ReadBuffer);
return ReturnValue;
}
} /// <summary>
/// 生成SMTPCode
/// </summary>
/// <param name="s">信息内容</param>
/// <param name="SMTPCode">SMTPCode</param>
/// <returns></returns>
public bool DoesStringContainSMTPCode(string s, string SMTPCode)
{
return (s.IndexOf(SMTPCode, , ) == -) ? false : true;
} }
#endregion #region SckMail
public class SckMail
{
/// <summary>
/// 邮件发送优先级权举表
/// </summary>
public enum Prioritys
{
/// <summary>
/// 最高级别
/// </summary>
HIGH = ,
/// <summary>
/// 默认级别
/// </summary>
NORMAL = ,
/// <summary>
/// 最低级别
/// </summary>
LOW =
} /// <summary>
/// 构造函数
/// </summary>
public SckMail()
{
strErrMessage = "";
strResponse = "";
} #region "返回信息" /// <summary>
/// SMTP服务器反馈的信息
/// </summary>
private string strResponse = ""; /// <summary>
/// 取得SMTP服务器反馈的信息
/// </summary>
public string ServerResponse
{
get
{
return strResponse;
}
} /// <summary>
/// 错误反馈信息
/// </summary>
private string strErrMessage = ""; /// <summary>
/// 取得错误反馈信息
/// </summary>
public string ErrorMessage
{
get
{
return strErrMessage;
}
} /// <summary>
/// 认证用户名
/// </summary>
private string strUsername = ""; /// <summary>
/// 认证用户名
/// </summary>
public string Username
{
get { return strUsername; }
set { strUsername = value; }
} /// <summary>
/// 认证密码
/// </summary>
private string strPassword = ""; /// <summary>
/// 认证密码
/// </summary>
public string Password
{
get { return strPassword; }
set { strPassword = value; }
} #endregion #region "邮件属性" /// <summary>
/// SMTP 邮件服务器
/// </summary>
private string _SmtpHost = ""; /// <summary>
/// SMTP 邮件服务器
/// </summary>
public string SmtpHost
{
get
{
return _SmtpHost;
}
set
{
_SmtpHost = value;
}
} /// <summary>
/// SMTP邮件服务器端口
/// </summary>
private int _Port = ; /// <summary>
/// SMTP邮件服务器端口
/// </summary>
public int Port
{
get
{
return _Port;
}
set
{
_Port = value;
}
} #endregion /// <summary>
/// Base64加密
/// </summary>
/// <param name="code">明文</param>
/// <returns>密文</returns>
public string MailBase64(string code)
{
string encode = "";
try
{
byte[] bytes = Encoding.GetEncoding(Encoding.Default.CodePage).GetBytes(code);
encode = Convert.ToBase64String(bytes);
}
catch (Exception ex)
{
//utils.LastError = ex;
encode = code;
}
return encode;
} /// <summary>
/// Socket发送邮件
/// </summary>
/// <param name="strFrom">发送人 邮件地址</param>
/// <param name="strDisplayFromName">发送人显示名</param>
/// <param name="strTo">收件人 邮件地址</param>
/// <param name="strDisplayToName">收件人显示名</param>
/// <param name="clsPriority">邮件优先级</param>
/// <param name="blnHtml">是否发送HTML邮件</param>
/// <param name="strBase">发送来源(可以为空)</param>
/// <param name="strMessage">发送内容</param>
/// <param name="strSubject">邮件主题</param>
public void SendMail(string strFrom, string strDisplayFromName, string strTo, string strDisplayToName,
Prioritys clsPriority, bool blnHtml, string strBase, string strSubject, string strMessage)
{
string strResponseNumber = "";
bool bolConnect = false;
List<string> strSendBuffer = null;
string[] strResponseCode = { "", "", "", "", "", "", "" }; // success codes from SMTP server try
{
strSendBuffer = new List<string>(); SMTPClient smtpcMail = new SMTPClient(); smtpcMail.Connect(_SmtpHost, _Port);
bolConnect = smtpcMail.isConnected(); //判断是否进行了连接
if (!bolConnect)
{
strErrMessage = "Smtp服务器连接失败...";
return;
} //读取反馈信息
strResponseNumber = smtpcMail.GetServerResponse();
if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber, ""))
{
this.strResponse += strResponseNumber;
}
else
{
this.strErrMessage = "连接失败:" + strResponseNumber;
return;
} string strData = "";
strData = string.Concat("HELO ", _SmtpHost);
strData = string.Concat(strData, "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat(strData, "AUTH LOGIN");
strData = string.Concat(strData, "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat(strData, MailBase64(this.strUsername));
strData = string.Concat(strData, "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat(strData, MailBase64(this.strPassword));
strData = string.Concat(strData, "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat("MAIL FROM: ", "<" + strFrom + ">");
strData = string.Concat(strData, "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat("RCPT TO: ", "<" + strTo + ">");
strData = string.Concat(strData, "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat("DATA", "\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat("From: ", strDisplayFromName + "<" + strFrom + ">");
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "To: ");
strData = string.Concat(strData, strDisplayToName + "<" + strTo + ">");
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "Subject: ");
strData = string.Concat(strData, strSubject);
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "MIME-Version: 1.0");
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "X-Priority: " + clsPriority);
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "X-MSMail-Priority: " + clsPriority);
strData = string.Concat(strData, "\r\n");
if (blnHtml == true)
{
strData = string.Concat(strData, "Content-Type: text/html;");
}
else
{
strData = string.Concat(strData, "Content-Type: text/plain;");
}
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "charset=\"iso-8859-1\"");
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "Content-Transfer-Encoding: base64");
strData = string.Concat(strData, "\r\n");
strData = string.Concat(strData, "Content-Base: \"" + strBase + "\"");
strData = string.Concat(strData, "\r\n" + "\r\n"); strData = string.Concat(strData, MailBase64(strMessage));
strData = string.Concat(strData, "\r\n.\r\n");
strSendBuffer.Add(strData); strData = "";
strData = string.Concat(strData, "QUIT\r\n");
strSendBuffer.Add(strData);
int i = ; while (i < strSendBuffer.Count)
{
smtpcMail.SendCommandToServer(strSendBuffer[i]);
strResponseNumber = smtpcMail.GetServerResponse(); for (int j = ; j < strResponseCode.Length; j++)
{
if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber, strResponseCode[j]))
{
this.strResponse += strResponseNumber;
this.strResponse += "<br>";
break;
}
else
{
if (j == strResponseCode.Length - )
{
this.strErrMessage += strResponseNumber;
this.strErrMessage += strSendBuffer[i];
return;
}
}
} i++;
} // 结束循环
}
catch (SocketException err)
{
this.strErrMessage += err.Message + " " + err.StackTrace;
throw (err);
}
catch (Exception e)
{
this.strErrMessage += e.Message + " " + e.StackTrace;
throw (e);
}
} }
#endregion #region SMTPMail
public class SMTPMail
{
private string smtpServer;
private string smtpUser;
private string smtpPwd;
private string userEmail;
private string subject;
private string body; private int serverPort = ; //默认为25
private bool isHtml = false; // 是否Html邮件 //private string charset = "GB2312"; //设定语言代码,默认设定为GB2312,如不需要可设置为""
//private string priority = "Normal"; //邮件发送优先级,可设置为"High","Normal","Low" /// <summary>
/// 邮件服务器地址
/// </summary>
public string SmtpServer
{
get { return smtpServer; }
set { smtpServer = value; }
} /// <summary>
/// 邮件服务器端口号
/// </summary>
public int ServerPort
{
get { return serverPort; }
set { serverPort = value; }
} /// <summary>
/// 是否Html邮件
/// </summary>
public bool IsHtml
{
get { return isHtml; }
set { isHtml = value; }
} ///// <summary>
///// 代码
///// </summary>
//public string Charset
//{
// get { return charset; }
// set { charset = value; }
//}
///// <summary>
///// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"
///// </summary>
//public string Priority
//{
// set
// {
// switch (value.ToLower())
// {
// case "high":
// priority = "High";
// break; // case "1":
// priority = "High";
// break; // case "normal":
// priority = "Normal";
// break; // case "3":
// priority = "Normal";
// break; // case "low":
// priority = "Low";
// break; // case "5":
// priority = "Low";
// break; // default:
// priority = "High";
// break;
// }
// }
//} /// <summary>
/// 邮件发送帐号
/// </summary> public string SmtpUser
{
get { return smtpUser; }
set { smtpUser = value; }
} /// <summary>
/// 邮件发送帐号密码
/// </summary>
public string SmtpPwd
{
get { return smtpPwd; }
set { smtpPwd = value; }
} /// <summary>
/// 用户邮件地址,即是被发送人的邮件地址
/// </summary>
public string UserEmail
{
get { return userEmail; }
set { userEmail = value; }
} /// <summary>
/// 邮件标题
/// </summary>
public string Subject
{
get { return subject; }
set { subject = value; }
} /// <summary>
/// 邮件主体
/// </summary>
public string Body
{
get { return body; }
set { body = value; }
} /// <summary>
/// 发送邮件
/// </summary>
/// <returns>bool</returns>
public bool SendEmail()
{
try
{
using (MailMessage mailMsg = new MailMessage(this.smtpUser, this.userEmail))
{
mailMsg.Subject = this.subject;
mailMsg.Body = this.body;
mailMsg.SubjectEncoding = Encoding.UTF8; mailMsg.BodyEncoding = Encoding.UTF8;
mailMsg.IsBodyHtml = this.isHtml;
mailMsg.Priority = MailPriority.Normal; SmtpClient smtpClient = new SmtpClient(this.smtpServer);
smtpClient.Port = this.serverPort;
smtpClient.UseDefaultCredentials = false;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Credentials = new NetworkCredential(this.smtpUser, this.smtpPwd);
smtpClient.Send(mailMsg); return true;
} }
catch (Exception ex)
{ throw ex;
}
}
}
#endregion #region MailInfo
public class MailInfo
{
/// <summary>
/// 邮件服务器地址
/// </summary>
public string SmtpHost = string.Empty; /// <summary>
/// 端口号
/// </summary>
public int Port = ; /// <summary>
/// 邮箱登录名
/// </summary>
public string UserName = string.Empty; /// <summary>
/// 邮箱登录密码
/// </summary>
public string Password = string.Empty; /// <summary>
/// 发送人邮件
/// </summary>
public string From = string.Empty; /// <summary>
/// 发送人姓名
/// </summary>
public string FromName = string.Empty;
/// <summary>
/// 获取邮件配置信息
/// </summary>
/// <returns></returns>
public MailInfo GetMailInfo()
{
var config = System.Web.Configuration.WebConfigurationManager.AppSettings;
MailInfo model = new MailInfo();
model.SmtpHost = config["SmtpHost"].Trim();
try
{
if (!int.TryParse(config["SmtpPort"], out model.Port))
{
model.Port = ;
}
}
catch
{
model.Port = ;
}
model.UserName = config["EmailUserName"];
model.Password = config["EmailPassword"];
model.From = config["EmailFrom"];
model.FromName = config["EmailFromName"];
return model;
}
public static string SendMail(string email, string title, string content)
{
// bool IsSuccess = true;
string mailContent = string.Empty;
string mailinfo = string.Empty;
SckMail mail = null;
MailInfo mi =new MailInfo();
try
{
mail = new SckMail();
mi = mi.GetMailInfo();
mail.SmtpHost = mi.SmtpHost;
mail.Port = mi.Port;
mail.Username = mi.From;
mail.Password = mi.Password;
mailContent = content;
mail.SendMail
(
mi.From,
mi.FromName,
email,
email,
SckMail.Prioritys.NORMAL,
true,
"",
CheckStr(title),
mailContent
);
if (mail.ErrorMessage != "")
{
mailinfo = mail.ErrorMessage;
}
}
catch (Exception e)
{
mailinfo = e.Message;
}
finally
{
mail = null;
}
return mailinfo;
}
public static string CheckStr(object str)
{
string ret = "";
try
{
if (str == null) ret = "";
else
{
ret = str.ToString();
ret = ret.Replace("'", "''");
}
}
catch
{
ret = "";
}
return ret;
}
}
#endregion
}

C#通过拼接协议的方式来发送邮件类库的更多相关文章

  1. hql语句拼接的替换方式

    hql语句拼接的替换方式 hql语句拼接 String hql = "FROM Topic t WHERE t.forum=? "; List<Object> para ...

  2. HTTP协议请求方式: 中GET、POST和HEAD的介绍以及错误提示码

    HTTP协议中GET.POST和HEAD的介绍 2008-05-10 14:15 GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档 ...

  3. Json对象和字符串互相转换 数据拼接 JSON使用方式

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 一.JSON字符串转换为JSON对象: eval() 和 JSON.parse eg- json字符串: ...

  4. HTTP协议请求方式: 中GET、POST和HEAD的介绍_孤帆一叶

    HTTP协议中GET.POST和HEAD的介绍 2008-05-10 14:15 GET: 请求指定的页面信息,并返回实体主体.HEAD: 只请求页面的首部.POST: 请求服务器接受所指定的文档作为 ...

  5. 使用 EWS(Exchange Web Service)协议读取邮件、发送邮件

    问题: 公司之前可以通过POP3协议收发邮件,因而在SoapUI中用JavaMail可以读取邮件,后来配置了Office 365,POP3协议端口不再开放,邮件全部读取失败,报login timeou ...

  6. Linux三种SSH协议登陆方式

    在实际工作中遇到了三种不同SSH协议登陆Linux服务器的方式,由简单到复杂分别阐述:一.最简单也是最不安全的root账号密码登陆通过root账号+root密码登陆Linux服务器. 二.普通用户登陆 ...

  7. ctfhub技能树—web前置技能—http协议—请求方式

    打开靶机环境(每次打开都要30金币,好心疼啊) 题目描述为"请求方式" HTTP的请求方式共有八种 1.OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向 ...

  8. C#使用简单邮件传输协议(SMTP)发送邮件

    1.首先引入命名空间: using System.Net.Mail; 2.定义邮件配置类: public class EmailServiceConfig { /// <summary> ...

  9. Http协议Get方式获取图片

    一.                二.                         我试了试,Post方式也行啊,干嘛要叫强调Get方式,费解~~       答曰:get是向服务器请求数据,p ...

随机推荐

  1. node.js之内存机制特性

    Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB:V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一 ...

  2. 单例模式的c++实现

    #pragma once #include <iostream> #include <memory> #include <Windows.h> using name ...

  3. FastJson 常见问题

    一.场景 在使用序列化的时候,Object里包含了两个一模一样的对象,所以解析的时候,只有第一个能解析出来,另外一个无法显示. 查看了json的序列化源码,发现是DisableCircularRefe ...

  4. ArcGIS 10.3 for Server部署策略

    注:以下部署策略整理自官方文档,主要是为方便以后查阅各种部署方案. 1.单机部署与反向代理 1.1.反向代理 反向代理可采用ArcGIS Web Adaptor或者第三方的反向代理服务器. 1.2.部 ...

  5. Docker常用操作指令

    1.查看正在运行的容器 docker ps 2.查看所有容器 docker ps -a 3.停用所有正在运行的容器 docker stop $(docker ps -q) 4.删除所有容器 docke ...

  6. 【Python】猜数小游戏(文件操作)

    人生苦短,我用Python 关键词 1.多用户 2.字典记录所有成绩 3.每次游戏轮数&总游戏次数&平均每次游戏需要多少轮 字典Dictionary.列表List.元组Tuple差异化 ...

  7. 1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)

    学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节. 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https:/ ...

  8. Java—IO流 字节流

    IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络…),即是将数据源读入到程序的通信通 ...

  9. sqlserver2008 insert语句性能

    在sqlserver2008中“新建查询”,执行批量添加语句的执行时间: declare @i int ) begin INSERT INTO [xxx].[dbo].[北京万奇亚讯科技_QueryL ...

  10. SQL Server 2014 聚集列存储

    SQL Server 自2012以来引入了列存储的概念,至今2016对列存储的支持已经是非常友好了.由于我这边线上环境主要是2014,所以本文是以2014为基础的SQL Server 的列存储的介绍. ...