You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/JobSendMail/JobSendMail.cs

136 lines
6.0 KiB
C#

2 years ago
using log4net;
using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using MailKit.Net.Smtp;
using MimeKit;
using HtmlAgilityPack;
namespace JobSendMail
{
public class JobSendMail : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobSendMail));
public void Execute(IJobExecutionContext context)
{
string connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
string querySql = context.JobDetail.JobDataMap.GetString("QuerySql");
string MAILSENDACCOUNT = context.JobDetail.JobDataMap.GetString("MAILSENDACCOUNT");
string MAILSENDPASSWORD = context.JobDetail.JobDataMap.GetString("MAILSENDPASSWORD");
string MAILSENDSERVICE = context.JobDetail.JobDataMap.GetString("MAILSENDSERVICE");
string MAILSENDPORT = context.JobDetail.JobDataMap.GetString("MAILSENDPORT");
string MAILISSSL = context.JobDetail.JobDataMap.GetString("MAILISSSL");
log.Debug($"开始执行代理发送邮件");
using (SqlConnection dbcon = new SqlConnection(connStr))
{
SqlDataAdapter adapter = new SqlDataAdapter(querySql, dbcon);
DataTable table = new DataTable();
adapter.Fill(table);
if (table.Columns.Contains("RECEIVER") && table.Columns.Contains("SUBJECT"))
{
if (table.Rows.Count > 0)
{
foreach (DataRow row in table.Rows)
{
if (row["RECEIVER"].ToString() != "" && row["SUBJECT"].ToString() != "")
{
string sqlexe = "update op_mail_send set SENDSTATUS='Send',TRYCOUNT=TRYCOUNT+1 where GID='" + row["GID"].ToString() + "'";
dbcon.Open();
SqlCommand cmdexe = new SqlCommand(sqlexe, dbcon);
cmdexe.ExecuteNonQuery();
dbcon.Close();
var content = row["DESCRIPTION"].ToString();
var MAILTITLE = row["SUBJECT"].ToString();
StringWriter writer = new StringWriter();
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(content);
htmlDoc.Save(writer);
string str = writer.ToString();
try
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress(row["SENDER"].ToString(), row["SENDER"].ToString()));
var maillist = row["RECEIVER"].ToString().Split(';');
foreach (var mailaddr in maillist)
{
message.To.Add(MailboxAddress.Parse(mailaddr));
}
message.To.Add(MailboxAddress.Parse(row["SENDER"].ToString()));
// message.Subject = "Pre-alert/" + row["ORDERNO"].ToString() + "/" + row["HBLNO"].ToString();
message.Subject = MAILTITLE;
var html = new TextPart("html")
{
Text = str
};
MimeEntity entity = html;
message.Body = entity;
using (var client = new SmtpClient())
{
client.Connect(MAILSENDSERVICE, Convert.ToInt16(MAILSENDPORT), Convert.ToBoolean(MAILISSSL));
client.Authenticate(MAILSENDACCOUNT, MAILSENDPASSWORD);
client.Send(message);
client.Disconnect(true);
}
string sqlexe2 = "update op_mail_send set SENDSTATUS='Success' where GID='"+ row["GID"].ToString() + "'";
dbcon.Open();
SqlCommand cmdexe2 = new SqlCommand(sqlexe, dbcon);
cmdexe.ExecuteNonQuery();
dbcon.Close();
log.Debug($"邮件发送成功");
}
catch (Exception ex)
{
string sqlexe2 = "update op_mail_send set SENDSTATUS='Fail' where GID='" + row["GID"].ToString() + "'";
dbcon.Open();
SqlCommand cmdexe2 = new SqlCommand(sqlexe, dbcon);
cmdexe.ExecuteNonQuery();
dbcon.Close();
log.Debug($"邮件发送失败:错误信息{ex.Message}");
}
}
else {
log.Debug($"资料不全:{row["BSNO"].ToString()}");
}
}
}
else
{
log.Debug($"未查询到数据SQL语句{querySql}");
}
}
else
{
log.Error($"未包含所需的列(mblno,carrierid,portloadid)SQL语句{querySql}");
}
}
}
}
}