我正在使用以下代码发送在本地主机上运行时工作正常的邮件。我将网站上传到服务器,现在当我尝试实现相同的功能时,邮件将不会被发送。请帮助
public void send_click(object sender, EventArgs e)
{
mail();
}
public void mail()
{
SmtpClient smtpClient = new SmtpClient();
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
MailAddress fromAddress = new MailAddress(tb_email.Text, tb_name.Text);
smtpClient.Host = "smtp.gmail.com";
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.EnableSsl = true;
smtpClient.Credentials = new NetworkCredential("infoinnovative77@gmail.com", "***Password***");
smtpClient.Port = 587;
message.From = fromAddress;
message.To.Add(new MailAddress("info@mblube.com"));
// message.Subject = ddlSubject.SelectedItem.Text;
//message.CC.Add("taxistax@outlook.com");
message.IsBodyHtml = true;
StringBuilder msg = new StringBuilder();
msg.Append(tb_msg.Text);
msg.Append("<br/>");
msg.Append(tb_email.Text);
message.Body = msg.ToString();
//this code adds event handler to notify that mail is sent or not
smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
smtpClient.Send(message);
if (smtpClient.EnableSsl == true)
{
string CloseWindow = "alert('Message Sent Successfully!');";
Page.ClientScript.RegisterStartupScript(this.GetType(), "CloseWindow", CloseWindow, true);
}
else
{
string CloseWindow = "alert('Problem in Sending mail...try later!');";
Page.ClientScript.RegisterStartupScript(this.GetType(), "CloseWindow", CloseWindow, true);
}
}
void smtpClient_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
System.Net.Mail.MailMessage mailMessage = e.UserState as System.Net.Mail.MailMessage;
if (e.Cancelled || e.Error != null)
{
Response.Write(e.Error.Message);
Response.Write(e.Error.StackTrace);
}
else
{
Response.Write("Email sent successfully");
}
}
答案 0 :(得分:0)
如果您已上传到企业服务器: 1.确保您的防火墙没有阻止对作为IIS工作进程的w3wp.exe的传出请求; 2.验证您在页面上以及在事件查看器上收到的错误消息;
您发送的方式与我发送的方式几乎相同,但没有sendCompleted事件,因此不应该是代码问题。它也与this post和this one几乎相同。
答案 1 :(得分:0)
而不是SmtpClient smtpClient = new SmtpClient();
做
SmtpClient smtpClient = new SmtpClient("xx.xx.xxx.xx");
其中xx.xx.xxx.xx是域名的ip地址。如果您使用的是godaddy服务器,它将提供您托管站点的IP地址。如果您不知道IP地址,只需ping通站点名称。例如,如果您的站点名称是sum1.com,那么请ping sum1.com ..它将显示您的服务器提供的IP地址。
答案 2 :(得分:0)
我们无法从此处了解错误是否位于您的应用程序或托管环境中。 您可以采取一些步骤来缩小问题的根源。
首先:检查Windows EventLog。如果有Asp.net错误或smtpsvc警告,这可能是相关的,并为您提供失败的线索!
要检查您的应用程序本身是否正常工作,而不是在尝试发送邮件时抛出异常,请更改web.config中的邮件设置
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\smtp"/>
</smtp>
</mailSettings>
</system.net>
如果您现在想要从您的应用程序中发送邮件,它将被放入c:\ smtp。如果它在那里你的应用程序工作正常,问题很可能是由你的服务器,防火墙或ISP造成的。
然后启动一个cmd shell并通过telnet到它来检查你的smtp设置是否正确:
telnet mail.yourmailrpvider.net 25
如果这会引发错误,则很可能您的防火墙阻止了smtp流量,并且您需要与管理员取得联系
答案 3 :(得分:0)
请根据您上传应用程序的服务器更改smtpClient.Host和凭据。