c# smtpException:发送邮件失败 - 无法从传输连接读取数据:net_io_connectionclosed
c# smtpException: Failure sending mail - Unable to read data from the transport connection: net_io_connectionclosed
首先,我已经广泛搜索了,还没有找到解决方案
我尝试过使用 gmail(使用普通和双向验证密码和应用程序访问权限)和 yahoo 帐户,但都因相同的异常而失败
请注意:
- 注释掉的代码是最近尝试使用不同方法发送邮件的尝试,该方法也失败了
- sendmail() 中的循环仅用于测试目的
- 我还为此测试完全禁用了我的防病毒软件、防火墙和应用程序拦截器
- 使用的系统是Windows10
这是我的错误:
> System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed.
at System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine)
at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)
at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller)
at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at ConsoleApplication1.mail_core.sendMail() in c:\Users\CybeX\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\mail_core.cs:line 69
mail_core class:
class mail_core
{
//Mail components
static MailAddress from;
static string sfrom;
static string sto;
static MailAddress to;
static MailMessage newEmail;
//smtpServer
SmtpClient SMTPServer;
static string smtpServerAddress;
static int smtpServerPort;
static NetworkCredential cred;
static bool ssl;
public mail_core() { }
public void NewMail(string recieverEmail, string recieverName, string senderEmail, string senderName, string subject, string message, string attachementFile)
{
sto = recieverEmail;
sfrom = senderEmail;
//to = new MailAddress(recieverEmail, recieverName);
//from = new MailAddress(senderEmail, senderName);
//newEmail = new MailMessage(from, to);
//newEmail.Subject = subject;
//newEmail.Body = message;
newEmail = new MailMessage(sfrom, sto, subject, message);
if (!attachementFile.Equals(""))
{
newEmail.Attachments.Add(new Attachment(attachementFile));
}
}
public void smtpServerSettings(string server, int port, string EmailUsername, string EmailPassword, bool sslEnable)
{
smtpServerAddress = server;
smtpServerPort = port;
cred = new NetworkCredential(EmailUsername, EmailPassword);
ssl = sslEnable;
}
public void sendMail()
{
bool sent = false;
int count = 0;
while (!sent)
{
count++;
try
{
SMTPServer = new SmtpClient(smtpServerAddress);
SMTPServer.Port = smtpServerPort;
SMTPServer.UseDefaultCredentials = false;
SMTPServer.Credentials = cred;
SMTPServer.EnableSsl = ssl;
SMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SMTPServer.Send(newEmail);
sent = true;
}
catch (Exception x)
{
Console.WriteLine(x);
sent = false;
}
}
Console.WriteLine("tried times: {0}",count);
}
}
调用方式:
static void Main(string[] args)
{
mail_core temp = new mail_core();
Console.WriteLine("ready?");
Console.ReadLine();
temp.NewMail("xyz@gmail.com", "xyz", "abc@rocketmail.com", "abc", "a test email", "this is my first test email", "");
temp.smtpServerSettings("smtp.gmail.com", 465, "xyz@gmail.com", "2 step google verification password", true);
Console.WriteLine("sending...");
Console.WriteLine("=============================================================");
temp.sendMail();
Console.WriteLine("=============================================================");
//if (temp.sendMail())
//{
// Console.WriteLine("Mail sent :DDDD");
//}
//else Console.WriteLine("Mail not sent :(((");
Console.ReadLine();
}
根据您的需要改编,希望对您有所帮助
class mail_core
{
//Mail components
static MailAddress sFrom;
static MailAddress sTo;
static MailMessage newEmail;
//smtpServer
SmtpClient SMTPServer;
static string smtpServerAddress;
static int smtpServerPort;
static NetworkCredential cred;
static bool ssl;
/*
*
* Proposed usage:
*
* mail_core NewEmailToSend = new mail_core();
temp.NewMail("xyz@gmail.com", "xyz", "abc@rocketmail.com", "abc", "subject string", "body of email, this is my first test email regards", "");
temp.smtpServerSettings("smtp.gmail.com", 587, "xyz@gmail.com", "your password", true);
*/
public mail_core() { }
public void NewMail(string recieverEmail, string recieverName, string senderEmail, string senderName, string subject, string message, string attachementFile)
{
/*
* NewMail creates new mail message,
* Necassary parameters are: recieverEmail, senderEmail, subject, message
*
* Optional (can be empty) parameters: recieverName, senderName, attachmentFile
*/
sTo = new MailAddress(recieverEmail, recieverName);
sFrom = new MailAddress(senderEmail, senderName);
newEmail = new MailMessage(sFrom, sTo)
{
Subject = subject,
Body = message
};
if (!attachementFile.Equals("")) newEmail.Attachments.Add(new Attachment(attachementFile));
}
public void smtpServerSettings(string server, int port, string EmailUsername, string EmailPassword, bool sslEnable)
{
/*
* Enters SMTP (senders) server settings, if wrong, email wont send
* * Necassary are: ALL
*/
smtpServerAddress = server;
smtpServerPort = port;
cred = new NetworkCredential(EmailUsername, EmailPassword);
ssl = sslEnable;
}
public void addAttachment(string filename)
{
/*
* Add 1 or many attachments
*/
newEmail.Attachments.Add(new Attachment(filename));
}
public bool sendMail()
{
/*
* sends the email
* return true if sent, returns false if not sent
*/
try
{
SMTPServer = new SmtpClient(smtpServerAddress);
SMTPServer.Port = smtpServerPort;
SMTPServer.UseDefaultCredentials = false;
SMTPServer.Credentials = cred;
SMTPServer.EnableSsl = ssl;
SMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SMTPServer.Send(newEmail);
return true;
}
catch (Exception)
{
return false;
}
}
}
首先,我已经广泛搜索了,还没有找到解决方案
我尝试过使用 gmail(使用普通和双向验证密码和应用程序访问权限)和 yahoo 帐户,但都因相同的异常而失败
请注意:
- 注释掉的代码是最近尝试使用不同方法发送邮件的尝试,该方法也失败了
- sendmail() 中的循环仅用于测试目的
- 我还为此测试完全禁用了我的防病毒软件、防火墙和应用程序拦截器
- 使用的系统是Windows10
这是我的错误:
> System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed.
at System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine)
at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)
at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller)
at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at ConsoleApplication1.mail_core.sendMail() in c:\Users\CybeX\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\mail_core.cs:line 69
mail_core class:
class mail_core
{
//Mail components
static MailAddress from;
static string sfrom;
static string sto;
static MailAddress to;
static MailMessage newEmail;
//smtpServer
SmtpClient SMTPServer;
static string smtpServerAddress;
static int smtpServerPort;
static NetworkCredential cred;
static bool ssl;
public mail_core() { }
public void NewMail(string recieverEmail, string recieverName, string senderEmail, string senderName, string subject, string message, string attachementFile)
{
sto = recieverEmail;
sfrom = senderEmail;
//to = new MailAddress(recieverEmail, recieverName);
//from = new MailAddress(senderEmail, senderName);
//newEmail = new MailMessage(from, to);
//newEmail.Subject = subject;
//newEmail.Body = message;
newEmail = new MailMessage(sfrom, sto, subject, message);
if (!attachementFile.Equals(""))
{
newEmail.Attachments.Add(new Attachment(attachementFile));
}
}
public void smtpServerSettings(string server, int port, string EmailUsername, string EmailPassword, bool sslEnable)
{
smtpServerAddress = server;
smtpServerPort = port;
cred = new NetworkCredential(EmailUsername, EmailPassword);
ssl = sslEnable;
}
public void sendMail()
{
bool sent = false;
int count = 0;
while (!sent)
{
count++;
try
{
SMTPServer = new SmtpClient(smtpServerAddress);
SMTPServer.Port = smtpServerPort;
SMTPServer.UseDefaultCredentials = false;
SMTPServer.Credentials = cred;
SMTPServer.EnableSsl = ssl;
SMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SMTPServer.Send(newEmail);
sent = true;
}
catch (Exception x)
{
Console.WriteLine(x);
sent = false;
}
}
Console.WriteLine("tried times: {0}",count);
}
}
调用方式:
static void Main(string[] args)
{
mail_core temp = new mail_core();
Console.WriteLine("ready?");
Console.ReadLine();
temp.NewMail("xyz@gmail.com", "xyz", "abc@rocketmail.com", "abc", "a test email", "this is my first test email", "");
temp.smtpServerSettings("smtp.gmail.com", 465, "xyz@gmail.com", "2 step google verification password", true);
Console.WriteLine("sending...");
Console.WriteLine("=============================================================");
temp.sendMail();
Console.WriteLine("=============================================================");
//if (temp.sendMail())
//{
// Console.WriteLine("Mail sent :DDDD");
//}
//else Console.WriteLine("Mail not sent :(((");
Console.ReadLine();
}
根据您的需要改编,希望对您有所帮助
class mail_core
{
//Mail components
static MailAddress sFrom;
static MailAddress sTo;
static MailMessage newEmail;
//smtpServer
SmtpClient SMTPServer;
static string smtpServerAddress;
static int smtpServerPort;
static NetworkCredential cred;
static bool ssl;
/*
*
* Proposed usage:
*
* mail_core NewEmailToSend = new mail_core();
temp.NewMail("xyz@gmail.com", "xyz", "abc@rocketmail.com", "abc", "subject string", "body of email, this is my first test email regards", "");
temp.smtpServerSettings("smtp.gmail.com", 587, "xyz@gmail.com", "your password", true);
*/
public mail_core() { }
public void NewMail(string recieverEmail, string recieverName, string senderEmail, string senderName, string subject, string message, string attachementFile)
{
/*
* NewMail creates new mail message,
* Necassary parameters are: recieverEmail, senderEmail, subject, message
*
* Optional (can be empty) parameters: recieverName, senderName, attachmentFile
*/
sTo = new MailAddress(recieverEmail, recieverName);
sFrom = new MailAddress(senderEmail, senderName);
newEmail = new MailMessage(sFrom, sTo)
{
Subject = subject,
Body = message
};
if (!attachementFile.Equals("")) newEmail.Attachments.Add(new Attachment(attachementFile));
}
public void smtpServerSettings(string server, int port, string EmailUsername, string EmailPassword, bool sslEnable)
{
/*
* Enters SMTP (senders) server settings, if wrong, email wont send
* * Necassary are: ALL
*/
smtpServerAddress = server;
smtpServerPort = port;
cred = new NetworkCredential(EmailUsername, EmailPassword);
ssl = sslEnable;
}
public void addAttachment(string filename)
{
/*
* Add 1 or many attachments
*/
newEmail.Attachments.Add(new Attachment(filename));
}
public bool sendMail()
{
/*
* sends the email
* return true if sent, returns false if not sent
*/
try
{
SMTPServer = new SmtpClient(smtpServerAddress);
SMTPServer.Port = smtpServerPort;
SMTPServer.UseDefaultCredentials = false;
SMTPServer.Credentials = cred;
SMTPServer.EnableSsl = ssl;
SMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SMTPServer.Send(newEmail);
return true;
}
catch (Exception)
{
return false;
}
}
}