PDA

Просмотр полной версии : C# gmail отправка письма, ошибка


need_million
26.05.2010, 15:48
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;
}
}

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

need_million
26.05.2010, 16:46
вот такой пример есть, пишет "не допустимый знак в заголовке"

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(htmlvi ew + 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());
}

eLWAux
26.05.2010, 18:40
.NET учитывает имя компьютера в домене отправителя, который передается во время приветствия.
Можно попробовать указывать домен при инициализации полей Sender, From,
однако давать имя компьютеру на русском - однозначно зло.

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

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

изменил в обоих вариантах ошибка "Не удалось отправить сообщение на SMTP-сервер. Код ошибки транспорта: 0x80040217. Отклик сервера: not available"

KATYA
26.05.2010, 20:26
Попробуй порт 465 во втором примере, но там защищённое соединение и требуется проверка подлинности, а вот на других почтовиках ведь нормально отсылает?

noxjoker
26.05.2010, 20:41
SSl - true
587 порт

KATYA
26.05.2010, 20:42
SSl - true
587 порт
Этот порт есть в примере, у меня пашет :)

KATYA
26.05.2010, 20:45
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);//отправка
}
}
}


Вот так всё пашет :) Юзай с пользой, кодер!

Даже ещё сейчас проверю разок!
Работает, если нет то не знаю в чём дело :(

KATYA
26.05.2010, 20:50
Вопрос: ограничение на отпраку писем через smtp в гугле, в минуту в час с ip?

need_million
26.05.2010, 20:59
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(htmlvi ew + 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());
}
этот пример работает только надо имя компа английсское..

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