How Can i Send Mail Through Exchange Server by using SMTP

35,581

Solution 1

I have done it. For more details about my code use this link.

Below Code is worked Fine with

Server : Windows Server 2003,Windows Server 2008,Windows Server 2008 R2

IIS : 6.0, 7.0

.Net Frame Wotk : 2.0,3.5,4.0

string sMessage;
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
try
{

 //you can provide invalid from address. but to address Should be valil
MailAddress fromAddress = new MailAddress("[email protected]", "BALA");

smtpClient.Host = "Exchange Server Name";
smtpClient.Port = 25;
//smtpClient.Port = 587;


smtpClient.UseDefaultCredentials = true; 

message.From = fromAddress;
message.To.Add([email protected]); //Recipent email 
message.Subject = _subject;
message.Body = _details;
message.IsBodyHtml = true;

//smtpClient.EnableSsl = true; 

smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

smtpClient.Send(message); 

sMessage = "Email sent.";
}
catch (Exception ex)
{
sMessage = "Coudn't send the message!\n " + ex.Message;
}


lblMailStatus.Text = sMessage;

Solution 2

You are attempting to send a mail message using Exchange. In order to do that, the sender (or sending process) must have permissions on the account it is logged in under to send on behalf of the user you are specifying as the sender. This is different from going through Exchange's SMTP mail transfer agent (MTA) in order to have Exchange receive and route an email message. So you are on the right track with knowing you should do this using SMTP, but you are just trying to use the wrong API for accomplishing this. You want to take a look at CDOSYS for sending it through the SMTP MTA without having to do user authentication. Search on System.Web.Mail.MailMessage for more specific examples - there are plenty out there. If the Exchange server does not seem to accept/deliver the SMTP message delivered to it in this fashion, you might simply need to open up its configuration a bit. In that event, the Exchange server is probably configured with tight security on routing of mail received via its SMTP MTA and just needs to have the IP address of the machine(s) you are sending these messages from configured to allow for mail forwarding.

Share:
35,581
Bala Kumar
Author by

Bala Kumar

Updated on July 12, 2020

Comments

  • Bala Kumar
    Bala Kumar almost 4 years

    I want to Run Below code without

    NetworkCredential nc = new Net.NetworkCredential("USERNAME", "PASSWORD"). 
    

    BY using Only Exchange Host (Server Name) And Port

    Im Getting Error For this code : Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender

    protected void SendEmail(object sender, EventArgs e)
    {
        SmtpClient smtpClient = new SmtpClient("ExchangeServerName",25);
        MailMessage message = new MailMessage();
        try
        {
            MailAddress fromAddress = new MailAddress("[email protected]", "From Me");
            MailAddress toAddress = new MailAddress("[email protected]", "To You");
            message.From = fromAddress;
            message.To.Add(toAddress);
            message.Subject = "Testing!";
            message.Body = "This is the body of a sample message";
            smtpClient.UseDefaultCredentials = true;
            System.Net.NetworkCredential nc = CredentialCache.DefaultNetworkCredentials;
            smtpClient.Credentials = (System.Net.ICredentialsByHost)nc.GetCredential("ExchangeServerName", 25, "Basic");
            smtpClient.Send(message);
            lblText.Text ="Email sent.";
        }
        catch (Exception ex)
        {
            lblText.Text = "Coudn't send the message!\n  " + ex.Message;
        }
    }