2016-05-30 13 views
0

これは登録が成功した後にメールを送信するためのコードです。私のlocalhost IISサーバー上で正常に動作します。しかし、サーバー上にWebサイトを展開した後、電子メールはユーザーに送信されません。例外やエラーメッセージは表示されません。ホスティング後にメール送信コードが機能しない

MailMessage mm = new MailMessage("[email protected]", 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 = "[email protected]"; 
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("[email protected]"); 
        mail.Subject = "mailSubject"; 
        mail.Body = "mailBody"; 
        mail.IsBodyHtml = true; 

        mail.To.Add("[email protected]"); 



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

送信ポートとして465を試してください。 –

+0

多くのプロバイダでは、使用するホストが独自のホストである必要があります。彼らがホストを設定しなければならないと私に話すまで、私はあるプロバイダと同じ問題を抱えていました。 –

+0

私はそう考えていました...しかし、同じコードが別のページでパスワード回復のために働いています – kish

答えて

1

System.Web.Mail非推奨ではない、System.Net.Mailを使用してください。名前My Awesome Appを選択し、Googleが独自のパスワードを生成します
Google> Account> Security> Apps> Manage apps> Add an app

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

var fromAddress = new MailAddress("[email protected]", "From Name"); 
var toAddress = new MailAddress("[email protected]", "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アカウントでの安全性の低いアプリケーションを許可している:link

そして最後に、(、Googleはあなたが時速250以上のメッセージを送信することを許可しないことを念頭に置いて一日あたり千以上何もしません最後の番号がわからない場合)。

+0

私はこれを試しましたが、動作しません。私のコードは別のページで動作していますが、このページのどの問題がわかりません – kish

+0

@kish新しいアプリケーションパスワードを試してみてください。 –

+0

申し訳ありません私はdidnt、あなたを取得..新しいアプリのパスワード? – kish

関連する問題