Отправить письмо с помощью System.Net.Mail через Gmail - PullRequest
53 голосов
/ 13 января 2011

Я хочу отправить письмо через gmail-сервер.Я поставил следующий код, но он застревает при отправке.Любая идея, пожалуйста ....

MailMessage mail = new MailMessage();

        mail.From = new System.Net.Mail.MailAddress("apps@xxxx.com");

        //create instance of smtpclient
        SmtpClient smtp = new SmtpClient();
        smtp.Port = 465;
        smtp.UseDefaultCredentials = true;

        smtp.Host = "smtp.gmail.com";            

        smtp.EnableSsl = true;

        //recipient address
        mail.To.Add(new MailAddress("yyyy@xxxx.com"));

        //Formatted mail body
        mail.IsBodyHtml = true;
        string st = "Test";

        mail.Body = st;
        smtp.Send(mail);

xxxx.com является почтовым доменом в приложениях Google.Спасибо ...

Ответы [ 7 ]

77 голосов
/ 13 января 2011
MailMessage mail = new MailMessage();
mail.From = new System.Net.Mail.MailAddress("apps@xxxx.com");

// The important part -- configuring the SMTP client
SmtpClient smtp = new SmtpClient();
smtp.Port = 587;   // [1] You can try with 465 also, I always used 587 and got success
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; // [2] Added this
smtp.UseDefaultCredentials = false; // [3] Changed this
smtp.Credentials = new NetworkCredential(mail.From,  "password_here");  // [4] Added this. Note, first parameter is NOT string.
smtp.Host = "smtp.gmail.com";            

//recipient address
mail.To.Add(new MailAddress("yyyy@xxxx.com"));

//Formatted mail body
mail.IsBodyHtml = true;
string st = "Test";

mail.Body = st;
smtp.Send(mail);
13 голосов
/ 25 января 2011

Я попробовал вышеуказанный код C # для отправки почты из Gmail на мой корпоративный идентификатор.Во время выполнения приложения элемент управления остановился на неопределенный срок в операторе smtp.Send(mail);

Во время поиска в Google я наткнулся на похожий код , который работал для меня.Я публикую этот код здесь.

class GMail
{
    public void SendMail()
    {  
        string pGmailEmail = "fromAddress@gmail.com";
        string pGmailPassword = "GmailPassword";
        string pTo = "ToAddress"; //abc@domain.com
        string pSubject = "Test From Gmail";
        string pBody = "Body"; //Body
        MailFormat pFormat = MailFormat.Text; //Text Message
        string pAttachmentPath = string.Empty; //No Attachments

        System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage();
        myMail.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/smtpserver",
                          "smtp.gmail.com");
        myMail.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/smtpserverport",
                          "465");
        myMail.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/sendusing",
                          "2");
        //sendusing: cdoSendUsingPort, value 2, for sending the message using 
        //the network.

        //smtpauthenticate: Specifies the mechanism used when authenticating 
        //to an SMTP 
        //service over the network. Possible values are:
        //- cdoAnonymous, value 0. Do not authenticate.
        //- cdoBasic, value 1. Use basic clear-text authentication. 
        //When using this option you have to provide the user name and password 
        //through the sendusername and sendpassword fields.
        //- cdoNTLM, value 2. The current process security context is used to 
        // authenticate with the service.
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
        //Use 0 for anonymous
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/sendusername",
            pGmailEmail);
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/sendpassword",
             pGmailPassword);
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/smtpusessl",
             "true");
        myMail.From = pGmailEmail;
        myMail.To = pTo;
        myMail.Subject = pSubject;
        myMail.BodyFormat = pFormat;
        myMail.Body = pBody;
        if (pAttachmentPath.Trim() != "")
        {
            MailAttachment MyAttachment =
                    new MailAttachment(pAttachmentPath);
            myMail.Attachments.Add(MyAttachment);
            myMail.Priority = System.Web.Mail.MailPriority.High;
        }

        SmtpMail.SmtpServer = "smtp.gmail.com:465";
        SmtpMail.Send(myMail);
    }
}
7 голосов
/ 13 января 2011

Установите smtp.UseDefaultCredentials = false и используйте smtp.Credentials = new NetworkCredential (gMailAccount, пароль);

2 голосов
/ 11 июля 2018

Я понимаю, что это ответ на очень старый вопрос с множеством других хороших ответов. Я публикую этот код, чтобы включить некоторые полезные комментарии, опубликованные другими пользователями, такие как Использование операторов и более новые методы, где некоторые ответы имеют устаревшие методы. Этот код был протестирован и работает по состоянию на 11 июля 2018 года.

При отправке через учетную запись GMail убедитесь, что Разрешить менее безопасные приложения включено с панели управления

Код класса C #:

public class Email
{
public void NewHeadlessEmail(string fromEmail, string password, string toAddress, string subject, string body)
{
    using (System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage())
    {
        myMail.From = new MailAddress(fromEmail);
        myMail.To.Add(toAddress);
        myMail.Subject = subject;
        myMail.IsBodyHtml = true;
        myMail.Body = body;

        using (System.Net.Mail.SmtpClient s = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587))
        {
            s.DeliveryMethod = SmtpDeliveryMethod.Network;
            s.UseDefaultCredentials = false;
            s.Credentials = new System.Net.NetworkCredential(myMail.From.ToString(), password);
            s.EnableSsl = true;
            s.Send(myMail);
        }
    }
}
}

Код класса VB:

Public Class Email    
Sub NewHeadlessEmail(fromEmail As String, password As String, toAddress As String, subject As String, body As String)
        Using myMail As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
            myMail.From = New MailAddress(fromEmail)
            myMail.To.Add(toAddress)
            myMail.Subject = subject
            myMail.IsBodyHtml = True
            myMail.Body = body

            Using s As New Net.Mail.SmtpClient("smtp.gmail.com", 587)
                s.DeliveryMethod = SmtpDeliveryMethod.Network
                s.UseDefaultCredentials = False
                s.Credentials = New Net.NetworkCredential(myMail.From.ToString(), password)
                s.EnableSsl = True
                s.Send(myMail)
            End Using

        End Using
    End Sub
End Class

Использование C #:

{
Email em = new Email();
em.NewHeadlessEmail("myemail@gmail.com", "password", "recipient@email.com", "Subject Text", "Body Text");
}

Использование VB:

Dim em As New Email
em.NewHeadlessEmail("myemail@gmail.com", "password", "recipient@email.com", "Subject Text", "Body Text")
2 голосов
/ 24 октября 2017

Это сработало для меня:

        MailMessage message = new MailMessage("myemail@gmail.com", toemail, subjectEmail, comments);
        message.IsBodyHtml = true;

        try {
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            client.Timeout = 2000;
            client.EnableSsl = true;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //client.Credentials = CredentialCache.DefaultNetworkCredentials;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassord");
            client.Send(message);

            message.Dispose();
            client.Dispose();
        }
        catch (Exception ex) {
            Debug.WriteLine(ex.Message);
        }

НО (на момент написания этой статьи - октябрь 2017 г.)

Вам нужно ВКЛЮЧИТЬзащищенные приложения «внутри опции» приложения с доступом к учетной записи »в разделе« Моя учетная запись »в настройках безопасности / конфиденциальности Google (https://myaccount.google.com)

1 голос
/ 01 ноября 2013

Использовать номер порта 587

С помощью следующего кода он будет работать успешно.

MailMessage mail = new MailMessage();
mail.From = new MailAddress("abc@mydomain.com", "Enquiry");
mail.To.Add("abcdef@yahoo.com");
mail.IsBodyHtml = true;
mail.Subject = "Registration";
mail.Body = "Some Text";
mail.Priority = MailPriority.High;

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
//smtp.UseDefaultCredentials = true;
smtp.Credentials = new System.Net.NetworkCredential("xyz@gmail.com", "<my gmail pwd>");
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

smtp.Send(mail);

Но есть проблема с использованием Gmail.Электронное письмо будет успешно отправлено, но в папке «Входящие» получателя будет указан адрес электронной почты в поле «Адрес отправителя» вместо «Адрес отправителя», указанный в коде.

Чтобы решить эту проблему, выполните действия, указанные вследующая ссылка.

http://karmic -development.blogspot.in / 2013/10 / send-email-from-aspnet-using-gmail-as.html

перед тем как выполнить все вышеперечисленные шаги, вам необходимо аутентифицировать свою учетную запись gmail, чтобы разрешить доступ к вашему приложению, а также к устройствам.Пожалуйста, проверьте все шаги для аутентификации аккаунта по следующей ссылке:

http://karmic -development.blogspot.in / 2013/11 / allow-account-access-while-send.html

0 голосов
/ 12 июня 2015
    ActiveUp.Net.Mail.SmtpMessage smtpmsg = new ActiveUp.Net.Mail.SmtpMessage();
    smtpmsg.From.Email = "abcd@test.com";
    smtpmsg.To.Add(To);
    smtpmsg.Bcc.Add("vijay@indiagreat.com");
    smtpmsg.Subject = Subject;
    smtpmsg.BodyText.Text = Body;

    smtpmsg.Send("mail.test.com", "abcd@sss.com", "user@1234", ActiveUp.Net.Mail.SaslMechanism.Login);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...