C# gmail отправка письма, ошибка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by need_million, 26 May 2010.

  1. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    Code:
            public static bool SendEmail(
            string pGmailEmail,
            string pGmailPassword,
            string pTo,
            string pSubject,
            string pBody,
            System.Web.Mail.MailFormat pFormat,
            string pAttachmentPath)
            {
                try
                {
                    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;
                    //}
    
                    System.Web.Mail.SmtpMail.SmtpServer = "smtp.gmail.com:465";
                    System.Web.Mail.SmtpMail.Send(myMail);
                    return true;
                }
                catch (Exception ex)
                {
                    throw;
                }
    }
    Code:
                SendEmail("nickname@gmail.com",
                                 "password",
                                 "nick@bk.ru",
                                 "This is email subject",
                                 "This is email body",
                                 System.Web.Mail.MailFormat.Text,
                                 "");
    ошибка Не удалось отправить сообщение на SMTP-сервер. Код ошибки транспорта: 0x80040217. Отклик сервера: not available
     
  2. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    вот такой пример есть, пишет "не допустимый знак в заголовке"

    Code:
                SmtpClient SmtpServer = new SmtpClient();
                SmtpServer.Credentials = new System.Net.NetworkCredential("nick@gmail.com", "passs");
                SmtpServer.Port = 587;
                SmtpServer.Host = "smtp.gmail.com";
                SmtpServer.EnableSsl = true;
                mail = new MailMessage();
                String[] addr = TextBox1.Text.Split(',');
                try 
                {
                    mail.From = new MailAddress("nick@gmail.com", "Developers", System.Text.Encoding.UTF8);
                    Byte i;
                    for( i = 0;i< addr.Length; i++)
                        mail.To.Add(addr[i]);
                    mail.Subject = TextBox3.Text;
                    mail.Body = TextBox4.Text;
                    if(ListBox1.Items.Count != 0)
                    {
                        for(i = 0;i<ListBox1.Items.Count;i++)
                        mail.Attachments.Add(new Attachment(ListBox1.Items[i].ToString()));
                    }
                    //LinkedResource logo = new LinkedResource(path);
                    //logo.ContentId = "Logo";
                    string htmlview;
                    htmlview = "<html><body><table border=2><tr width=100%><td><img src=cid:Logo alt=companyname /></td><td>MY COMPANY DESCRIPTION</td></tr></table><hr/></body></html>";
                    AlternateView alternateView1 = AlternateView.CreateAlternateViewFromString(htmlview + TextBox4.Text, null, MediaTypeNames.Text.Html);
                    //alternateView1.LinkedResources.Add(logo);
                    mail.AlternateViews.Add(alternateView1);
                    mail.IsBodyHtml = true;
                    mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                    mail.ReplyTo = new MailAddress(TextBox1.Text);
                    SmtpServer.Send(mail);
                }
                catch (Exception ex){
                MessageBox.Show(ex.ToString());
                }
     
  3. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    .NET учитывает имя компьютера в домене отправителя, который передается во время приветствия.
    Можно попробовать указывать домен при инициализации полей Sender, From,
    однако давать имя компьютеру на русском - однозначно зло.

    Попробуй изменить имя компьютера с русских букв на англ.
     
  4. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    изменил в обоих вариантах ошибка "Не удалось отправить сообщение на SMTP-сервер. Код ошибки транспорта: 0x80040217. Отклик сервера: not available"
     
  5. KATYA

    KATYA Active Member

    Joined:
    9 Feb 2009
    Messages:
    236
    Likes Received:
    121
    Reputations:
    9
    Попробуй порт 465 во втором примере, но там защищённое соединение и требуется проверка подлинности, а вот на других почтовиках ведь нормально отсылает?
     
    #5 KATYA, 26 May 2010
    Last edited: 26 May 2010
  6. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    SSl - true
    587 порт
     
  7. KATYA

    KATYA Active Member

    Joined:
    9 Feb 2009
    Messages:
    236
    Likes Received:
    121
    Reputations:
    9
    Этот порт есть в примере, у меня пашет :)
     
    #7 KATYA, 26 May 2010
    Last edited: 26 May 2010
  8. KATYA

    KATYA Active Member

    Joined:
    9 Feb 2009
    Messages:
    236
    Likes Received:
    121
    Reputations:
    9
    PHP:
     using System.Web
    using System.Net
    using System.Net.Mail
    using System.Net.Mime;
    namespace 
    qwe
    {
        class 
    qwer
        
    {
            static 
    void Main()
            {
                
    //Авторизация на SMTP сервере 
                
    SmtpClient Smtp = new SmtpClient("smtp.gmail.com"587);
                
    Smtp.Credentials = new NetworkCredential("iuser@gmail.com""passs");
                
    Smtp.EnableSsl true

                
    //Формирование письма 
                
    MailMessage Message = new MailMessage();
                
    Message.From = new MailAddress("iuser@gmail.com");//тоже что и iuser@gmail.com
                
    Message.To.Add(new MailAddress("куда"));
                
    Message.Subject "tetet";
                
    Message.Body "354";



                
    Smtp.Send(Message);//отправка 
            
    }
        }
    }
    Вот так всё пашет :) Юзай с пользой, кодер!

    Даже ещё сейчас проверю разок!
    Работает, если нет то не знаю в чём дело :(
     
    #8 KATYA, 26 May 2010
    Last edited: 26 May 2010
  9. KATYA

    KATYA Active Member

    Joined:
    9 Feb 2009
    Messages:
    236
    Likes Received:
    121
    Reputations:
    9
    Вопрос: ограничение на отпраку писем через smtp в гугле, в минуту в час с ip?
     
  10. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0

    этот пример работает только надо имя компа английсское..

    а кто то знает как это обойти?