Pregunta

Estoy escribiendo un trabajo con temporizador que, una vez completado, envía un correo electrónico desde noreply@company.com, cuando llega a Outlook muestra esa dirección como la persona del remitente.

¿Hay alguna manera de hacer que muestre un 'nombre para mostrar'?Por ejemplo, todos los correos electrónicos recibidos de mí se mostrarían Paul Matthews no paul.matthews@company.com.(Lo cual sé que en este caso probablemente tenga más que ver con AD y Exchange).

El código que estoy usando está a continuación.

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());
               }
           }

La cuestión es que la dirección de correo electrónico debe ser noreply@company.com, que usaremos para múltiples aplicaciones, por lo que el nombre para mostrar debe reflejar el nombre de la aplicación.

¿Fue útil?

Solución

¿Puedo sugerir cambiar al uso del System.Net.Mail.MailMessage objeto en lugar de SPUtility. SPUtility.SendEmail Es un buen atajo pero, como has visto, pierdes mucho control sobre cómo se envía y formatea el mensaje.El MailMessage El objeto te devuelve eso, pero requiere solo un poquito más de trabajo.

Para responder a su pregunta específica, el objeto MailAddress maneja el formato de la combinación de dirección de correo electrónico y nombre, por lo que tendría que usar el nombre de su aplicación como 'fromname' abajo.

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);

Otros consejos

Si desea personalizar la dirección de correo electrónico del remitente, entonces no puede usar Sputility.SendeMail: tendrá que usar las clases de marco System.net.mail.

Bajo las cubiertas, la esputilidad llama un método llamado "EliminarfriendynamefromemailAladdress": (

Licenciado bajo: CC-BY-SA con atribución
scroll top