繁体   English   中英

在C#中使用smtp客户端发送电子邮件

[英]send email with smtp client in c#

我需要从我的Asp.net c#网站发送电子邮件,我们在ovh上托管,这是我的工作:

public static void Send(string stringFrom, string stringFromPass, 
        string stringTo, string stringBody, string stringSubject, int tryNb)
    {
        // Command line argument must the the SMTP host.
        SmtpClient client = new SmtpClient("smtp.mondomaine.me", 587);
        // Specify the e-mail sender. 
        // Create a mailing address that includes a UTF8 character 
        // in the display name.
        MailAddress from = new MailAddress(stringFrom,
           "Sender",
        System.Text.Encoding.UTF8);
        // Set destinations for the e-mail message.
        MailAddress to = new MailAddress(stringTo);
        // Specify the message content.
        MailMessage message = new MailMessage(from, to);
        message.Body = stringBody;
        message.IsBodyHtml = true;
        message.BodyEncoding = System.Text.Encoding.UTF8;
        message.Subject = stringSubject;
        message.SubjectEncoding = System.Text.Encoding.UTF8;
        //provide Authentication Details need to be passed when sending email from gmail
        string password = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(stringFromPass));
        NetworkCredential mailAuthentication = new NetworkCredential(stringFrom, password);
        client.UseDefaultCredentials = false;
        client.Credentials = mailAuthentication; 
        // Set the method that is called back when the send operation ends.
        client.SendCompleted += new
        SendCompletedEventHandler(SendCompletedCallback);
        // The userState can be any object that allows your callback  
        // method to identify this send operation. 
        // For this example, the userToken is a string constant. 
        string userState = stringFrom + "*&(k)&*" +
            stringFromPass + "*&(k)&*" + stringTo + "*&(k)&*" +
            stringBody + "*&(k)&*" + stringSubject + "*&(k)&*" + tryNb.ToString();
        client.SendAsync(message, userState);
    }

然后我在需要时称呼此功能。 我收到OVH服务器响应:

sorry, invalid MAIL FROM for open-smtp session (http://travaux.ovh.com/?do=details&id=2602)

在最后一个链接上,他们告诉:

messages sent via open-smtp will only be accepted if the email address of the fields From / Sender is the same connection login used for POP access.

如您在我的代码中看到的,我没有使用POP,我也不知道该怎么做。 那为什么要这样限制呢? 任何解决该问题的想法都将不胜枚举。

如果要发送throw Gmail-Id


在您的电子邮件ID中更改电子邮件设置

遵循这些步骤

  • 单击1->设置

  • 点击2->转发和POP / IMAP

  • 选择3->启用IMAP访问


邮寄功能:

MailMessage message = new MailMessage();
message.From = new MailAddress("Abc@Servername.com");
message.To.Add("Tosender@Servername.com");
message.Subject = "Your QR Code Image";
message.Body = "Please open this link and download this QR Code image for scanning your QRCode :" + QR_Code;

SmtpClient client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);

在WebConfig中:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network">
            <network host="smtp.gmail.com" port="587" userName="abc@gmail.com" password="****" />
        </smtp>
    </mailSettings>
</system.net>

问题是由mailAuthentication引起的,现在我正在使用System.Security.SecureString而不是Convert.ToBase64String来编码passwords并且一切正常。

System.Security.SecureString secureString = new System.Security.SecureString();
stringFromPass.ToCharArray().ToList().ForEach(p => secureString.AppendChar(p));
NetworkCredential mailAuthentication = new NetworkCredential(stringFrom, secureString);

在Outlook中,您必须将smtp配置为使用电子邮件和密码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM