using System.Net.Mail;
using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Model;
using Milimoe.FunGame.Core.Service;
namespace Milimoe.FunGame.Core.Api.Transmittal
{
public class MailSender : IDisposable
{
///
/// 邮件服务内部ID
///
public Guid MailSenderID { get; }
///
/// Smtp客户端信息
///
public SmtpClientInfo SmtpClientInfo => _SmtpClientInfo;
///
/// 上一个邮件发送的结果
///
public MailSendResult LastestResult => _LastestResult;
///
/// 上一个邮件的发送错误信息(如果发送失败)
///
public string ErrorMsg => _ErrorMsg;
/**
* 内部变量
*/
private readonly SmtpClientInfo _SmtpClientInfo;
private MailSendResult _LastestResult = MailSendResult.NotSend;
private string _ErrorMsg = "";
///
/// 创建邮件服务
///
///
///
///
///
///
///
public MailSender(string senderMailAddress, string senderName, string senderPassword, string host, int port, bool ssl)
{
MailSenderID = Guid.NewGuid();
_SmtpClientInfo = new SmtpClientInfo(senderMailAddress, senderName, senderPassword, host, port, ssl);
if (!MailManager.MailSenders.ContainsKey(MailSenderID)) MailManager.MailSenders.Add(MailSenderID, this);
}
///
/// 创建完整邮件对象
///
///
///
///
///
///
///
///
///
public MailObject CreateMail(string subject, string body, MailPriority priority, bool html, string[] toList, string[]? ccList = null, string[]? bccList = null)
{
return new MailObject(this, subject, body, priority, html, toList, ccList, bccList);
}
///
/// 发送邮件
///
///
///
public MailSendResult Send(MailObject mail)
{
_LastestResult = MailManager.Send(this, mail, out _ErrorMsg);
return _LastestResult;
}
private bool _isDisposed = false;
///
/// 关闭邮件服务
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// 关闭邮件服务
///
///
protected void Dispose(bool disposing)
{
if (!_isDisposed)
{
if (disposing)
{
MailManager.Dispose(this);
}
}
_isDisposed = true;
}
}
}