【发布时间】:2019-10-19 18:10:53
【问题描述】:
首先,如果这是一个重复的问题,我深表歉意。找了好久,没找到相关问题。
所以问题来了:我正在使用 SmtpClient 和 MailMessage 类来发送邮件。我将邮件的主题作为邮件发送方法中的参数传递。第一次使用正确的主题(我作为参数发送的主题)发送邮件。但是,在接下来的所有电子邮件中,无论我输入什么主题,主题都保持不变(第一次使用的那个)。主题是从方法内部设置的。
(注意:这是一个 WindowsForm 应用程序)
我尝试的是,创建另一个名为“Refresh()”的方法,该方法处理邮件对象并再次创建它(仅使用 from 和 to 信息)。并在每次发送邮件后调用此方法。但这对解决这个问题没有帮助。
代码如下:
字段:
MailMessage message;
SmtpClient mailer;
string from = "sender email";
string pass = "sender pass";
string to = "rec email";
构造函数:
try
{
message = new MailMessage(from, to);
mailer = new SmtpClient("smtp.gmail.com", 587);
mailer.Credentials = new NetworkCredential(from, pass);
mailer.EnableSsl = true;
}
catch(Exception ex) { /*code to write log*/ }
刷新方法:
void RefreshMessage()
{
try
{
message.Subject = "";
message.Dispose();
message = new MailMessage(from, to);
}
catch(Exception ex) { /*write log*/ }
}
发送邮件的方法:
internal void TextOnly(string sub, string bodyMessage)
{
try
{
message.Subject = sub;
message.Body = bodyMessage;
mailer.Send(message);
this.RefreshMessage();
}
catch (Exception ex) { /*write log*/ }
}
如何调用的示例:
m.TextOnly("Subject 1" , SomeStringMethod());
m.TextOnly("Another Title " + anyString, "Some string mail");
m.TextOnly("[TAG] Email subject goes here" , AnotherStringMethod());
现在无论在参数中发送什么主题,它都将始终与主题“主题 1”一起发送(来自上面的示例)。正文没问题,只是主题不对。
我在类中几乎没有其他方法(例如用于其他目的,例如发送带有附件的邮件),其中主题不作为参数传递,而是直接从方法内设置(如方法内的message.Subject = "Example Sub") ,在这种情况下它工作正常。
但是在上面的例子中,主题被传递给方法,主题保持不变。
【问题讨论】:
-
刷新方法的想法是什么,你是在重复使用相同的MailMessage还是什么,你为什么要缓存这个?你也经历过这个。
-
每次需要发送电子邮件时,您没有创建新的 MailMessage() 是否有任何特殊原因?此外,正如@TheGeneral 所述,调试可以为您提供有关该行为的更多信息。
-
感谢您的回复。是的,我正在重用相同的 MailMessage,我不会每次都创建新的 MailMessage 来节省内存,因为程序会非常频繁地发送邮件,并且在我的情况下,内存消耗和使用率必须保持在较低水平。我做错了吗?每次创建新的 MailMessage 是否更有效? PS:我对 C# 和 WinFormApp 还很陌生。
标签: c# smtpclient