如何在C#MailMessage中设置电子邮件过期时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#MailMessage中设置电子邮件过期时间相关的知识,希望对你有一定的参考价值。
我在设置电子邮件的到期时间方面遇到问题。
我使用System.Net.Mail.MailMessage
,我没有找到任何可以处理这个问题的属性。我在Outlook中看到它是可能的。我已经在StackOverflow,MSDN和Google上进行了一些搜索,但我找不到符合我需求的答案。
这是它在Outlook http://blogs.mccombs.utexas.edu/the-most/2011/02/24/set-outlook-emails-to-delete-in-the-future/中设置的方式
问题是如何使用C#在MailMessage上设置Expires After。是否需要设置任何标头,还是有其他方法可以做到这一点?这可能吗?
答案
据我所知,我们的Exchange服务器处理收到的邮件过期。因此,从您的角度来看,这不是您可以放在邮件标题中的任何内容,而是由客户电子邮件帐户提供商处理。
另一方面:EmailMessageClass拥有您正在寻找的房产。
/编辑:如果您发送的电子邮件包含一个链接,该链接将用户重定向回您的页面,您可以检查您的数据库是否有效电子邮件(已过期)每次发送电子邮件时,请保存时间戳和用户发送电子邮件给。如果用户通过邮件提供的链接返回,您可以检查实际时间是否在到期日之前。 (例如DateSend + 2周)
另一答案
mail.Headers.Add("expiry-date", sTime);
EG
namespace RedmineMailService
{
// https://stackoverflow.com/questions/637866/sending-mail-without-installing-an-smtp-server
// http://www.nullskull.com/articles/20030316.asp
// https://www.redmine.org/boards/2/topics/26198
// https://www.redmine.org/boards/2/topics/22259
static class MailSender
{
public static void Test()
{
using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient())
{
using (System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage())
{
client.Port = 25;
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
// client.UseDefaultCredentials = true;
// Must be after UseDefaultCredentials
// client.Credentials = new System.Net.NetworkCredential("mailboxname", "password", "example.com");
// client.Port = 587;
// client.EnableSsl = true;
client.Host = "COR-EXCHANGE.cor.local";
mail.Subject = "this is a test email.";
mail.Body = "Test";
// https://www.iana.org/assignments/message-headers/message-headers.xhtml
// https://tools.ietf.org/html/rfc4021#page-32
// mail.Headers.Add("Importance", "High"); // High, normal, or low.
mail.Priority = System.Net.Mail.MailPriority.High;
// for read-receipt
mail.Headers.Add("Disposition-Notification-To", RedmineMailService.Trash.UserData.info);
string sTime = System.DateTime.UtcNow.AddDays(-1).ToString("dd MMM yyyy", System.Globalization.CultureInfo.InvariantCulture) + " " +
System.DateTime.UtcNow.ToShortTimeString() + " +0000"; // Fixed, from +0100 - just take UTC - works in .NET 2.0 - no need for offset
// Set a message expiration date
// When the expiration date passes, the message remains visible
// in the message list with a strikethrough.
// It can still be opened, but the strikethrough gives a visual clue
// that the message is out of date or no longer relevant.
mail.Headers.Add("expiry-date", sTime);
// https://tools.ietf.org/html/rfc2076#page-16
// https://tools.ietf.org/html/rfc1911
// The case-insensitive values are "Personal" and "Private"
// Normal, Confidential,
// If a sensitivity header is present in the message, a conformant
// system MUST prohibit the recipient from forwarding this message to
// any other user. If the receiving system does not support privacy and
// the sensitivity is one of "Personal" or "Private", the message MUST
// be returned to the sender with an appropriate error code indicating
// that privacy could not be assured and that the message was not
// delivered [X400].
mail.Headers.Add("Sensitivity", "Company-confidential");
// for delivery receipt
mail.DeliveryNotificationOptions =
System.Net.Mail.DeliveryNotificationOptions.OnSuccess
| System.Net.Mail.DeliveryNotificationOptions.OnFailure;
// mail.From = new System.Net.Mail.MailAddress("somebody@friends.com", "SomeBody");
mail.From = new System.Net.Mail.MailAddress(RedmineMailService.Trash.UserData.info, "COR ServiceDesk");
mail.To.Add(new System.Net.Mail.MailAddress(RedmineMailService.Trash.UserData.Email, "A"));
// mail.To.Add(new System.Net.Mail.MailAddress("user1@friends.com", "B"));
// mail.To.Add(new System.Net.Mail.MailAddress("user2@friends.com", "B"));
// mail.To.Add(new System.Net.Mail.MailAddress(RedmineMailService.Trash.UserData.info, "ServiceDesk"));
try
{
System.Console.WriteLine("Host: " + client.Host);
System.Console.WriteLine("Credentials: " + System.Convert.ToString(client.Credentials));
client.Send(mail);
System.Console.WriteLine("Mail versendet");
}
catch (System.Exception ex)
{
do
{
System.Console.Write("Fehler: ");
System.Console.WriteLine(ex.Message);
System.Console.WriteLine("Stacktrace: ");
System.Console.WriteLine(ex.StackTrace);
System.Console.WriteLine(System.Environment.NewLine);
ex = ex.InnerException;
} while (ex != null);
} // End Catch
} // End Using mail
} // End Using client
} // End Sub Test
} // End Class MailSender
} // End Namespace RedmineMailService.Trash
以上是关于如何在C#MailMessage中设置电子邮件过期时间的主要内容,如果未能解决你的问题,请参考以下文章