forked from project-redbud/FunGame-Core
MailSender改进
This commit is contained in:
parent
98ac6093b2
commit
736cab93b5
@ -1,4 +1,4 @@
|
|||||||
using Milimoe.FunGame.Core.Interface.Base;
|
using System.Net.Mail;
|
||||||
using Milimoe.FunGame.Core.Library.Common.Network;
|
using Milimoe.FunGame.Core.Library.Common.Network;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
using Milimoe.FunGame.Core.Library.Server;
|
using Milimoe.FunGame.Core.Library.Server;
|
||||||
@ -6,23 +6,43 @@ using Milimoe.FunGame.Core.Service;
|
|||||||
|
|
||||||
namespace Milimoe.FunGame.Core.Api.Transmittal
|
namespace Milimoe.FunGame.Core.Api.Transmittal
|
||||||
{
|
{
|
||||||
public class MailSender
|
public class MailSender : IDisposable
|
||||||
{
|
{
|
||||||
|
public Guid MailSenderID { get; }
|
||||||
public SmtpClientInfo SmtpClientInfo => _SmtpClientInfo;
|
public SmtpClientInfo SmtpClientInfo => _SmtpClientInfo;
|
||||||
public MailSendResult LastestResult => _LastestResult;
|
public MailSendResult LastestResult => _LastestResult;
|
||||||
|
public string ErrorMsg => _ErrorMsg;
|
||||||
|
|
||||||
private SmtpClientInfo _SmtpClientInfo;
|
private readonly SmtpClientInfo _SmtpClientInfo;
|
||||||
private MailSendResult _LastestResult = MailSendResult.NotSend;
|
private MailSendResult _LastestResult = MailSendResult.NotSend;
|
||||||
|
private string _ErrorMsg = "";
|
||||||
|
|
||||||
public MailSender(string SenderMailAddress, string SenderName, string SenderPassword, string Host, int Port, bool OpenSSL)
|
public MailSender(string SenderMailAddress, string SenderName, string SenderPassword, string Host, int Port, bool OpenSSL)
|
||||||
{
|
{
|
||||||
|
MailSenderID = Guid.NewGuid();
|
||||||
_SmtpClientInfo = new SmtpClientInfo(SenderMailAddress, SenderName, SenderPassword, Host, Port, OpenSSL);
|
_SmtpClientInfo = new SmtpClientInfo(SenderMailAddress, SenderName, SenderPassword, Host, Port, OpenSSL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MailObject CreateMail(string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[] CCList, string[] BCCList)
|
||||||
|
{
|
||||||
|
return new MailObject(this, Subject, Body, Priority, HTML, ToList, CCList, BCCList);
|
||||||
|
}
|
||||||
|
|
||||||
public MailSendResult Send(MailObject Mail)
|
public MailSendResult Send(MailObject Mail)
|
||||||
{
|
{
|
||||||
_LastestResult = MailManager.Send(this, Mail);
|
_LastestResult = MailManager.Send(this, Mail, out _ErrorMsg);
|
||||||
return _LastestResult;
|
return _LastestResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Dispose()
|
||||||
|
{
|
||||||
|
return MailManager.Dispose(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDisposable.Dispose()
|
||||||
|
{
|
||||||
|
MailManager.Dispose(this);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
|
using Milimoe.FunGame.Core.Api.Transmittal;
|
||||||
|
|
||||||
namespace Milimoe.FunGame.Core.Library.Common.Network
|
namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||||
{
|
{
|
||||||
@ -12,17 +13,19 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
|
|||||||
public bool HTML { get; } = false;
|
public bool HTML { get; } = false;
|
||||||
public string[] ToList { get; } = Array.Empty<string>();
|
public string[] ToList { get; } = Array.Empty<string>();
|
||||||
public string[] CCList { get; } = Array.Empty<string>();
|
public string[] CCList { get; } = Array.Empty<string>();
|
||||||
|
public string[] BCCList { get; } = Array.Empty<string>();
|
||||||
|
|
||||||
public MailObject(string Sender, string SenderName, string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[] CcList)
|
public MailObject(MailSender Sender, string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[] CCList, string[] BCCList)
|
||||||
{
|
{
|
||||||
this.Sender = Sender;
|
this.Sender = Sender.SmtpClientInfo.SenderMailAddress;
|
||||||
this.SenderName = SenderName;
|
this.SenderName = Sender.SmtpClientInfo.SenderName;
|
||||||
this.Subject = Subject;
|
this.Subject = Subject;
|
||||||
this.Body = Body;
|
this.Body = Body;
|
||||||
this.Priority = Priority;
|
this.Priority = Priority;
|
||||||
this.HTML = HTML;
|
this.HTML = HTML;
|
||||||
this.ToList = ToList;
|
this.ToList = ToList;
|
||||||
this.CCList = CcList;
|
this.CCList = CCList;
|
||||||
|
this.BCCList = BCCList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,20 +1,29 @@
|
|||||||
using System.Net;
|
using System.Collections;
|
||||||
|
using System.Net;
|
||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
using Milimoe.FunGame.Core.Api.Transmittal;
|
using Milimoe.FunGame.Core.Api.Transmittal;
|
||||||
using Milimoe.FunGame.Core.Library.Common.Network;
|
using Milimoe.FunGame.Core.Library.Common.Network;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
|
using Milimoe.FunGame.Core.Library.Exception;
|
||||||
using Milimoe.FunGame.Core.Library.Server;
|
using Milimoe.FunGame.Core.Library.Server;
|
||||||
|
|
||||||
namespace Milimoe.FunGame.Core.Service
|
namespace Milimoe.FunGame.Core.Service
|
||||||
{
|
{
|
||||||
internal class MailManager
|
internal class MailManager
|
||||||
{
|
{
|
||||||
internal SmtpClient? SmtpClient { get; }
|
internal static Hashtable HashClient { get; } = new Hashtable();
|
||||||
|
|
||||||
internal static MailSendResult Send(MailSender Sender, MailObject Mail)
|
internal static MailSendResult Send(MailSender Sender, MailObject Mail, out string ErrorMsg)
|
||||||
|
{
|
||||||
|
ErrorMsg = "";
|
||||||
|
try
|
||||||
{
|
{
|
||||||
SmtpClientInfo Info = Sender.SmtpClientInfo;
|
SmtpClientInfo Info = Sender.SmtpClientInfo;
|
||||||
SmtpClient Smtp = new()
|
SmtpClient Smtp;
|
||||||
|
Guid MailSenderID = Sender.MailSenderID;
|
||||||
|
if (!HashClient.ContainsKey(MailSenderID))
|
||||||
|
{
|
||||||
|
Smtp = new()
|
||||||
{
|
{
|
||||||
Host = Info.Host,
|
Host = Info.Host,
|
||||||
Port = Info.Port,
|
Port = Info.Port,
|
||||||
@ -22,6 +31,9 @@ namespace Milimoe.FunGame.Core.Service
|
|||||||
DeliveryMethod = SmtpDeliveryMethod.Network,
|
DeliveryMethod = SmtpDeliveryMethod.Network,
|
||||||
Credentials = new NetworkCredential(Info.SenderMailAddress, Info.SenderPassword)
|
Credentials = new NetworkCredential(Info.SenderMailAddress, Info.SenderPassword)
|
||||||
};
|
};
|
||||||
|
HashClient.Add(MailSenderID, Smtp);
|
||||||
|
}
|
||||||
|
else Smtp = (SmtpClient)HashClient[MailSenderID]!;
|
||||||
MailMessage Msg = new()
|
MailMessage Msg = new()
|
||||||
{
|
{
|
||||||
Subject = Mail.Subject,
|
Subject = Mail.Subject,
|
||||||
@ -40,15 +52,33 @@ namespace Milimoe.FunGame.Core.Service
|
|||||||
{
|
{
|
||||||
Msg.CC.Add(CC);
|
Msg.CC.Add(CC);
|
||||||
}
|
}
|
||||||
try
|
|
||||||
{
|
|
||||||
Smtp.Send(Msg);
|
Smtp.Send(Msg);
|
||||||
return MailSendResult.Success;
|
return MailSendResult.Success;
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
ErrorMsg = e.GetErrorInfo();
|
||||||
return MailSendResult.Fail;
|
return MailSendResult.Fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static bool Dispose(MailSender Sender)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Guid MailSenderID = Sender.MailSenderID;
|
||||||
|
if (HashClient.ContainsKey(MailSenderID))
|
||||||
|
{
|
||||||
|
((SmtpClient)HashClient[MailSenderID]!).Dispose();
|
||||||
|
HashClient.Remove(MailSenderID);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user