D'accord, j'ai donc ce programme qui agit essentiellement comme un client de messagerie pour une entreprise, il construit le courrier électronique pour eux et l'envoie.
J'ai tout fait dessus, mais quand je vais envoyer l'e-mail, ils reçoivent un Mailbox Unavailable. Accessed Denied - Invalid HELO Name
Fait intéressant, j'utilise le même nom d'utilisateur pour les informations d'identification du réseau et la partie.
EDIT: Mettre à jour le code avec ce que j'utilise maintenant ... Maintenant obtenir Failure sending mail
Erreur.
Voici mon MailConst.cs
classe:
public class MailConst
{
/*
*/
public static string Username = "username";
public static string Password = "password";
public const string SmtpServer = "smtp.domain.co.uk";
public static string From = Username + "@domain.co.uk";
}
et voici l'utilisation de ces variables dans ma classe principale:
public static void SendMail(string recipient, string subject, string body, string[] attachments)
{
SmtpClient smtpClient = new SmtpClient();
NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password, MailConst.SmtpServer);
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(MailConst.From);
// setup up the Host, increase the timeout to 5 minutes
smtpClient.Host = MailConst.SmtpServer;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = basicCredential;
smtpClient.Timeout = (60 * 5 * 1000);
message.From = fromAddress;
message.Subject = subject + " - " + DateTime.Now.Date.ToString().Split(' ')[0];
message.IsBodyHtml = true;
message.Body = body.Replace("\r\n", "<br>");
message.To.Add(recipient);
if (attachments != null)
{
foreach (string attachment in attachments)
{
message.Attachments.Add(new Attachment(attachment));
}
}
smtpClient.Send(message);
}
Juste comme note latérale. Le programme fonctionne lorsque j'utilise mes informations d'identification, lorsque je passe par mon propre serveur, ne fonctionne tout simplement pas lorsqu'il est lié à la leur.
Afin de résoudre ce problème, j'ai dû utiliser le paramètre facultatif Domain
pour le NetworkCredential
Mon code ressemble maintenant à ceci:
NetworkCredential basicCredential = new NetworkCredential(MailConst.UserName, MailConst.Password, MailConst.Domain
Où le MailConst.Domain
est une chaîne pointant vers le domaine Exchange.