托管后无法发送g-mail

时间:2016-05-30 15:05:46

标签: c# asp.net email sendmail

这是我注册成功后发送电子邮件的代码。它在我的localhost IIS服务器上正常工作。但是在服务器上部署网站后,电子邮件不会发送给用户。没有显示异常或错误消息。

MailMessage mm = new MailMessage("xyz@gmail.com", TextBoxEmail.Text.Trim());
mm.Subject = "Password Recovery";
mm.Body = string.Format("Hi ,<br /><br />Your password is .<br /><br />Thank You.");
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
NetworkCredential NetworkCred = new NetworkCredential();
NetworkCred.UserName = "xyz@gmail.com";
NetworkCred.Password = "xyz";
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mm);
message = "Registration successful. Activation email has been sent.";
ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);

相同的代码适用于密码恢复页面。但这里没有用。

我在代码中做了一些更改,并且还创建了一个新页面进行注册,现在它显示以下错误

对象引用未设置为对象的实例。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

首先我认为这是邮件发送代码的错误,但它在iis本地服务器上以及在其他页面上正常工作。所以我认为这可能是按钮点击事件的问题。能够到达这里。请帮助我,因为我知道我在这里得到答案。

我的新代码:

   using (MailMessage mail = new MailMessage())
                {
                    mail.From = new MailAddress("xyz@gmail.com");
                    mail.Subject = "mailSubject";
                    mail.Body = "mailBody";
                    mail.IsBodyHtml = true;

                    mail.To.Add("xyz@gmail.com");



                    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))//2nd parameter is PORT No.
                    {
                        smtp.Credentials = new System.Net.NetworkCredential("xyz@gmail.com", "xyz");
                        smtp.EnableSsl = true;//set this as your Host Name properties, for gmail,its true
                        smtp.Send(mail);//actual sending operation here
                    }
                }

1 个答案:

答案 0 :(得分:1)

请务必使用System.Net.Mail,而不是已弃用的System.Web.Mail

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

此外,您必须通过以下方式为该应用创建特定的Google密码:
Google> Account> Security> Apps> Manage apps> Add an app 选择名称My Awesome App,Google将生成自定义密码。

另一个建议是在您的Google帐户中使用不太安全的应用程序:link

最后,请注意,Google不允许您每小时发送超过250封邮件,每天不超过1000封(不确定最后一位数字)。