简体   繁体   English

部署到主机后,使用 gmail 通过 C# 发送邮件不起作用

[英]Sending mail through C# with gmail is not working after deploying to host

I am trying to send mail through Gmail.我正在尝试通过 Gmail 发送邮件。 I am sending mail successfully when I am testing on localhost, but this does not work when I upload it to a web host.我在本地主机上测试时成功发送邮件,但是当我将它上传到网络主机时这不起作用。 I am seeing this type of error:我看到这种类型的错误:

Request for the permission of type System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed. System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 类型的权限请求失败。

Whenever I am using port 25 get this type of error below:每当我使用端口 25 时,都会出现以下此类错误:

The SMTP server requires a secure connection or the client was not authenticated. SMTP 服务器需要安全连接或客户端未通过身份验证。 The server response was: 5.5.1 Authentication Required服务器响应为:5.5.1 Authentication Required

Below is my code of send email.下面是我发送电子邮件的代码。

MailMessage mail = new MailMessage("host@gmail.com","User@gamil.com");

SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
mail.Subject = "Any String" 
mail.Body = mailbody;
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new System.Net.NetworkCredential("xyz@gmail.com","123");               
SmtpServer.EnableSsl = true;

SmtpServer.Send(mail);

Is there any solution?有什么解决办法吗? Please suggest to me!请给我建议!

Edit: OP Added extra information crucial to answering this question, but I'm keeping the old answer around as it might still help someone编辑: OP 添加了对回答这个问题至关重要的额外信息,但我保留旧答案,因为它可能仍然对某人有所帮助

New Answer: This StackOverflow question already answered this question新答案:这个StackOverflow 问题已经回答了这个问题

OldAnswer: As this StackOverflow answer already answered, you changed the Port on the SMTP Server to 587 instead of its default ( 25 ) and this requires elevated permissions causing this error change this: OldAnswer:由于StackOverflow 答案已经回答,您将 SMTP 服务器上的端口更改为587而不是其默认值 ( 25 ),这需要提升权限,导致此错误更改:

SmtpServer.Port = 587;

to this:对此:

SmtpServer.Port = 25;

and it should work它应该工作

Note: When using SSL the port needs to be 443注意:使用 SSL 时,端口需要为443

Answer : Your code add SmtpDeliveryFormat.SevenBit答:您的代码添加SmtpDeliveryFormat.SevenBit

Example:例子:

using (SmtpClient smtp = new SmtpClient())
                {
                    NetworkCredential credential = new NetworkCredential
                    {
                        UserName = WebConfigurationManager.AppSettings["UserName"],
                        Password = WebConfigurationManager.AppSettings["Password"],
                    };
                    smtp.Credentials = credential;
                    smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                    smtp.DeliveryFormat = SmtpDeliveryFormat.SevenBit;
                    smtp.Host = WebConfigurationManager.AppSettings["Host"];
                    smtp.Port = WebConfigurationManager.AppSettings["Port"].ToNcInt();
                    smtp.EnableSsl = Convert.ToBoolean(WebConfigurationManager.AppSettings["EnableSsl"]);
                    smtp.Send(mail);
                }

Try This尝试这个

using System;
using System.Net;
using System.Net.Mail;

namespace AmazonSESSample
{
    class Program
{
    static void Main(string[] args)
    {
        // Replace sender@example.com with your "From" address. 
        // This address must be verified with Amazon SES.
        String FROM = "a@a.com";
        String FROMNAME = "ABC";

        // Replace recipient@example.com with a "To" address. If your account 
        // is still in the sandbox, this address must be verified.
        String TO = "a@a.com";

        // Replace smtp_username with your Amazon SES SMTP user name.
        String SMTP_USERNAME = "a@a.com";

        // Replace smtp_password with your Amazon SES SMTP user name.
        String SMTP_PASSWORD = "ASJKAJSN";

        // (Optional) the name of a configuration set to use for this message.
        // If you comment out this line, you also need to remove or comment out
        // the "X-SES-CONFIGURATION-SET" header below.
        String CONFIGSET = "ConfigSet";

        // If you're using Amazon SES in a region other than US West (Oregon), 
        // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP  
        // endpoint in the appropriate AWS Region.
        String HOST = "smtp-relay.sendinblue.com";

        // The port you will connect to on the Amazon SES SMTP endpoint. We
        // are choosing port 587 because we will use STARTTLS to encrypt
        // the connection.
        int PORT = 587;

        // The subject line of the email
        String SUBJECT =
            "Amazon SES test (SMTP interface accessed using C#)";

        // The body of the email
        String BODY =
            "<h1>Amazon SES Test</h1>" +
            "<p>This email was sent through the " +
            "<a href='https://aws.amazon.com/ses'>Amazon SES</a> SMTP interface " +
            "using the .NET System.Net.Mail library.</p>";

        // Create and build a new MailMessage object
        MailMessage message = new MailMessage();
        message.IsBodyHtml = true;
        message.From = new MailAddress(FROM, FROMNAME);
        message.To.Add(new MailAddress(TO));
        message.Subject = SUBJECT;
        message.Body = BODY;
        // Comment or delete the next line if you are not using a configuration set
        message.Headers.Add("X-SES-CONFIGURATION-SET", CONFIGSET);

        using (var client = new System.Net.Mail.SmtpClient(HOST, PORT))
        {
            // Pass SMTP credentials
            client.Credentials =
                new NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);

            // Enable SSL encryption
            client.EnableSsl = true;

            // Try to send the message. Show status in console.
            try
            {
                Console.WriteLine("Attempting to send email...");
                client.Send(message);
                Console.WriteLine("Email sent!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("The email was not sent.");
                Console.WriteLine("Error message: " + ex.Message);
            }
        }
    }
}

} }

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

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