如何在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中设置电子邮件过期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中设置会话永不过期

如何在节点redis中设置hmset的过期时间?

如何在 Laravel 5.1 中设置 JWT Token 的过期时间

在 WooCommerce 4 中设置购物车过期间隔

jsp 中设置session中 某一值的过期时间

如何在 Laravel 中设置会话超时?