web-dev-qa-db-fra.com

Envoi d'e-mails via Microsoft Exchange Server

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.

11
Zach Ross-Clyne

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.

8
Zach Ross-Clyne