提问人:KeithL 提问时间:8/24/2023 最后编辑:KeithL 更新时间:8/24/2023 访问量:87
使用 C 使用 SMTP 时,如何从 AWS SES 获取 MessageID#
How do you get the MessageID from AWS SES when using SMTP using C#
问:
我之所以提出这个问题,是因为我花了两天多的时间把答案放在一起来解决这个问题。
我尝试接收分配给电子邮件的 AWS MessageID,以便以后可以使用 SNS/SQS 接收电子邮件反馈。使用 System.Net.SmtpClient 对成功的电子邮件进行响应。您仅在失败时收到异常代码。
AWS 将始终发送响应,但为了获得成功的消息,我需要合并 MailKit nuget 并使用 MessageSent 事件。
resposne 看起来像这样......“OK xxxxx-xxxxxx-xxxxxx-xxxxx”,其中 x 是新分配的 messageID。
答:
0赞
KeithL
8/24/2023
#1
下面是使用我用来从成功响应中获取 messageID 的方法发送电子邮件的最简单代码。我希望这能为人们节省很多时间!
只需使用 MailKit nuget 和以下代码:
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
namespace TestMail
{
internal class Program
{
static async Task Main(string[] args)
{
await SendMail();
}
internal static async Task SendMail()
{
using (var mail = new MimeMessage())
{
mail.From.Add(MailboxAddress.Parse("[email protected]"));
mail.To.Add(MailboxAddress.Parse("[email protected]"));
mail.Subject = "TEST";
mail.Body = new TextPart(MimeKit.Text.TextFormat.Html) { Text = "<P>Hello!</P>" };
string goodMessage = "";
using (var smtp = new SmtpClient())
{
smtp.MessageSent += async (sender, args) =>
{
goodMessage = args.Response;
};
await smtp.ConnectAsync("email-smtp.us-east-1.amazonaws.com", 587, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync("user", "password");
await smtp.SendAsync(mail);
}
Console.WriteLine("This is the messageID: " + goodMessage.Split(' ')[1]);
}
}
}
}
0赞
jstedfast
8/24/2023
#2
我相信从 MailKit 3.0 开始,Send() 和 SendAsync() 方法现在返回一个字符串值,这样您实际上就不需要监听 MessageSent 事件:
using (var smtp = new SmtpClient())
{
await smtp.ConnectAsync("email-smtp.us-east-1.amazonaws.com", 587, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync("user", "password");
string response = await smtp.SendAsync(mail);
string[] tokens = response.Split(' ');
string id = tokens[1];
await smtp.DisconnectAsync(true);
}
评论
0赞
KeithL
8/24/2023
当 smtp 在使用中时,您是否需要断开连接?
0赞
jstedfast
9/2/2023
你没有“必须”这样做,但 Dispose() 方法只是关闭套接字,而不是将 QUIT 命令发送到服务器,这被认为是更好的礼仪。
评论