Pergunta

Estou escrevendo um trabalho de timer que, uma vez concluído, envia um e-mail de noreply@company.com, quando chega ao Outlook mostra esse endereço como a pessoa de origem.

Existe uma maneira de exibir um 'nome de exibição'.Por exemplo, todos os e-mails recebidos de mim mostrariam Paul Matthews não paul.matthews@company.com.(O que eu sei neste caso provavelmente tem mais a ver com AD e Exchange).

O código que estou usando está abaixo.

var emailFromAddress = _properties["EmailFromAddress"].ToString();
           var emailToAddress = _properties["EmailDistributionGroup"].ToString();
           var webAddress = _properties["WebSiteOfLibrary"].ToString();

           var subject = "New Report - " + DateTime.Now.ToString("dd MMM yyyy");

           StringDictionary messageHeader = new StringDictionary();
           messageHeader.Add("to", emailToAddress);
           messageHeader.Add("from", emailFromAddress);
           messageHeader.Add("subject", subject);
           messageHeader.Add("content-type", "text/html");

           using (SPSite site = new SPSite(webAddress))
           {
               using (SPWeb web = site.OpenWeb())
               {
                   DateTime timeNow = DateTime.Now;
                   var sb = new StringBuilder();
                   sb.Append(
                       "<STYLE TYPE='text/css'>body, html{font-color:#000;font-family:arial;font-size:8.0pt}</STYLE>");
                   sb.AppendFormat("<div style='font-size:11pt;font-family:calibri'>Results between {0} and {1}</div><br/><br/>", LastRun.ToString("dd MMM yyyy hh:mm tt"), timeNow.ToString("dd MMM yyyy h:mm tt"));
                   sb.AppendFormat("<div style='font-size:11pt;font-family:calibri'>Total: {0}<br/><br/>", total);
                   sb.AppendLine(HTMLResults);

                   SPUtility.SendEmail(web, messageHeader, sb.ToString());
               }
           }

O problema é que o endereço de e-mail deve ser noreply@company.com, que usaremos para vários aplicativos, portanto, o nome de exibição deve refletir o nome do aplicativo.

Foi útil?

Solução

Posso sugerir mudar para o uso do System.Net.Mail.MailMessage objeto em vez de SPUtility. SPUtility.SendEmail é um bom atalho, mas, como você viu, você perde muito controle sobre como a mensagem é enviada e formatada.O MailMessage object devolve isso, mas requer apenas um pouquinho mais de trabalho.

Para responder à sua pergunta específica, o objeto MailAddress lida com a formatação do endereço de e-mail e da combinação de nome, portanto, você teria que usar o nome do seu aplicativo como 'fromname' abaixo.

MailMessage msg = new MailMessage();

msg.From = new MailAddress(web.Site.WebApplication.OutboundMailSenderAddress, fromName);
msg.To.Add(new MailAddress(to));
msg.Subject = subject;
msg.Body = message;
msg.IsBodyHtml = true;
msg.BodyEncoding = System.Text.Encoding.UTF8;

SmtpClient server = new SmtpClient(web.Site.WebApplication.OutboundMailServiceInstance.Server.Address);

server.Send(msg);

Outras dicas

Se quiser personalizar o endereço de e-mail do remetente, você não poderá usar SPUtility.SendEmail - você terá que usar as classes da estrutura System.Net.Mail.

Nos bastidores, SPUtility chama um método chamado "RemoveFriendlyNameFromEmailAddress" :(

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top