MVC发送邮件
在MVC中,使用代码发送邮件。
此处示例代码应用背景:在提交一条数据时,给指定用户发送邮件进行提醒
0.在Web.Config中进行发送邮件功能的配置
<appSettings>
<!-- E-Mail SMTP Configurations -->
<add key="SMTPHost" value="XXX" />
<!-- Host name or IP address of SMTP server -->
<add key="SMTPPort" value="XXX" />
<!-- Port of SMTP server Default is -->
<add key="SMTPUser" value="XXX" />
<!-- User name of SMTP server -->
<add key="SMTPPassword" value="XXX" />
<!-- User password of SMTP server -->
<add key="SenderAddress" value="XXX" />
<!-- Default sender address of mail -->
<!-- Equipment Realtime Monitor Refresh Interval Time -->
<add key="RefreshTime" value="60000" />
<!-- Unit:Milliseconds -->
<!-- 0:正环境,需要基类验证,1:调试状态,无需基类验证 -->
<add key="IsDebug" value="0" />
<!-- 0:不发送邮件 1:发送邮件 -->
<add key="SendMail" value="1" />
<add key="AdminMail" value="" />
</appSettings>
1.新建一个Business,用于发送邮件,命名为‘SendEmailBusiness’
public class Send_EmailBusiness : BaseBusiness
{
//定义发送邮件的方法函数
public static void SendSystemMail(string sTo, string sCc, string sSubject, string sBody)
{
try
{
//定义发送者的邮箱地址
string sFrom = "XXX.com";
string adminEmial = System.Configuration.ConfigurationManager.AppSettings["AdminMail"];
string mailServer = System.Configuration.ConfigurationManager.AppSettings["SMTPHost"];
int mailPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SMTPPort"]);
string mailSender = System.Configuration.ConfigurationManager.AppSettings["SenderAddress"];
string mailSenderPwd = System.Configuration.ConfigurationManager.AppSettings["SMTPPassword"];
MailMessage message = new MailMessage();
string[] arrTo = sTo.Split(';');
foreach (string s in arrTo)
{
message.To.Add(s.Trim());
}
string[] arrCc = sCc.Split(';');
foreach (string s in arrCc)
{
message.CC.Add(s.Trim());
}
message.Bcc.Add(adminEmial);
//message.IsBodyHtml = true;
message.Priority = MailPriority.Normal;
message.From = new MailAddress(sFrom);
message.Subject = sSubject;
message.IsBodyHtml = true;
message.Body = sBody;
SmtpClient client = new SmtpClient(mailServer, mailPort);
client.Credentials = new NetworkCredential(mailSender, mailSenderPwd);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(message);
message.Dispose();
}
catch (Exception)
{
throw;
}
finally
{
}
}
public static void SendSystemMail(string sTo, string sSubject, string sBody)
{
try
{
string sFrom = "XXX.com";
string adminEmial = System.Configuration.ConfigurationManager.AppSettings["AdminMail"];
string mailServer = System.Configuration.ConfigurationManager.AppSettings["SMTPHost"];
int mailPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SMTPPort"]);
string mailSender = System.Configuration.ConfigurationManager.AppSettings["SenderAddress"];
string mailSenderPwd = System.Configuration.ConfigurationManager.AppSettings["SMTPPassword"];
MailMessage message = new MailMessage();
string[] arrTo = sTo.Split(';');
foreach (string s in arrTo)
{
message.To.Add(s.Trim());
}
message.Bcc.Add(adminEmial);
//message.IsBodyHtml = true;
message.Priority = MailPriority.Normal;
message.From = new MailAddress(sFrom);
message.Subject = sSubject;
message.IsBodyHtml = true;
message.Body = sBody;
SmtpClient client = new SmtpClient(mailServer, mailPort);
client.Credentials = new NetworkCredential(mailSender, mailSenderPwd);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(message);
message.Dispose();
}
catch (Exception EX)
{
//throw EX.InnerException;
}
finally
{
}
}
//某个操作对应的发送邮件功能,此处的操作是Submit。
//在这个函数里定义发送邮件的主题以及内容
public static async Task<bool> PCN_Submit_Email(string A, string C, string actor)
{
try
{
//邮件接收者的邮箱地址
string Emailto = "";
string EmailSubject = "XXX: " + A+ " Notice";
string EmailBody = "<html>" +
"<table>" +
"<tr>" +
"Hi , " +
"</tr>" +
"<tr>" +
"<td> ID: <strong>" + A+ "</strong> , Chang Classification: " + C+ ". </td>" +
"</tr>" +
"<tr>" +
"<td> The request was submitted by " + actor + " </td>" +
"</tr>" +
"</table>" +
"</html> ";
await Task.Run(() => SendSystemMail(Emailto, EmailSubject, EmailBody));
return true;
}
catch (Exception ex)
{
var message = ex.Message.ToString();
return false;
}
}
}
2.在进行操作时,用js生成flag,让控制器获取到,当前进行的是什么操作
@*submit*@
<script type="text/javascript" language="javascript">
//submit
function completeSubmitRequest(result) {
var json = eval('(' + result + ')');
if (json.ReturnMessage != null) {
$("#statusMessage").find("p").html(json.ReturnMessage);
} else {
$("#statusMessage").find("p").html(json.ReturnException.Message);
}
$("#statusMessage").removeClass("hide");
if (json.ReturnResult < 0) {
$("#statusMessage").removeClass("alert-success");
$("#statusMessage").addClass("alert-danger");
}
else {
$("#statusMessage").removeClass("alert-danger");
$("#statusMessage").addClass("alert-success");
$(function () {
$.post(
//前者是控制器路径地址,后者flag是对应的操作,flag会传到控制器的发送邮件方法里
"/XXX/XXX/Sendmail", { flag: "Submit" },
function (data) {
}
)
})
refreshRequestList();
}
}
</script>
3.控制器里调用发送邮件
#region Email
[HttpPost]
public async Task<ActionResult> Sendmail(string flag)
{
string actor = CurrentUser.UserName;
BusinessResult<string> result = new TKManagement.Business.BusinessResult<string>();
//
if (flag == "Close")
{
string ID= TempData["ID"].ToString();
string change = TempData["change1"].ToString();
await Send_EmailBusiness.lose_Email(A, C, actor);
}
if (flag == "Submit")
{
string ID= TempData["ID2"].ToString();
string change = TempData["change2"].ToString();
await Send_EmailBusiness.Submit_Email(A, C, actor);
}
return Json(result, "text/html");
}
#endregion