4

我正在使用“System.Net.Mail”在 C# 中的 Intranet 系统上发送电子邮件

Send() 方法非常慢,我不明白为什么。

调试后,我删除了 BCC 调用:(MM 是 MailMessage() 和 Item,字符串电子邮件地址):

MM.Bcc.Add(new MailAddress(Item));

在我评论这行之前,一封电子邮件大约需要 30 或 40 秒。现在,大约是 2 秒。为什么?

对此有解释吗?我可以添加“To”和“CC”而没有性能问题。但不是“密件抄送”。

4

1 回答 1

3

我有一个类似的问题,这让我疯狂地试图弄清楚是什么让一些电子邮件变慢而另一些电子邮件变快。

创建 SmtpClient 后发送的第一封电子邮件需要 5 秒。之后,重用同一个 SmtpClient,如果在前一个的 60 秒内完成,大约需要 0.4 秒。之后,我认为它会释放它与池的连接。

但是,添加与收件人地址重复的抄送总是会额外增加 5 秒。添加重复的 CC 两次将增加 10 秒。

我没有检查,但我认为如果重复项在“TO”或“BCC”列表中也是如此。

这是删除重复项的代码:

// check and remove duplicates
for (int x = 0; x < message.To.Count; x++)
{
    for (int y = message.To.Count - 1; y > x; y--)
    {
        if (message.To[y].Address == message.To[x].Address)
            message.To.RemoveAt(y);
    }
    for (int y = message.CC.Count - 1; y >= 0; y--)
    {
        if (message.CC[y].Address == message.To[x].Address)
            message.CC.RemoveAt(y);
    }
    for (int y = message.Bcc.Count - 1; y >= 0; y--)
    {
        if (message.Bcc[y].Address == message.To[x].Address)
            message.Bcc.RemoveAt(y);
    }
}
for (int x = 0; x < message.CC.Count; x++)
{
    for (int y = message.CC.Count - 1; y > x; y--)
    {
        if (message.CC[y].Address == message.CC[x].Address)
            message.CC.RemoveAt(y);
    }
    for (int y = message.Bcc.Count - 1; y >= 0; y--)
    {
        if (message.Bcc[y].Address == message.CC[x].Address)
            message.Bcc.RemoveAt(y);
    }
}
for (int x = 0; x < message.Bcc.Count; x++)
{
    for (int y = message.Bcc.Count - 1; y > x; y--)
    {
        if (message.Bcc[y].Address == message.Bcc[x].Address)
            message.Bcc.RemoveAt(y);
    }
}
于 2017-07-06T19:58:24.077 回答