0

MVCアプリケーションからGmailを使用してメールを送信しようとしています。次の例外が発生します

トランスポート接続からデータを読み取れません:既存の接続がリモートホストによって強制的に閉じられました。

これがメールを送信するためのコードです

string tn = "EmailVerification.htm";
string fileName = Path.GetFileName(tn);
string templatePath = Path.Combine(Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/EmailTemplates")), fileName);
  System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();

            mailMessage.From = new MailAddress(EmailFrom, "Email");
            mailMessage.To.Add(new MailAddress(To));
            mailMessage.Subject = "subject";
            mailMessage.IsBodyHtml = true;
            MailDefinition mailDef = new MailDefinition();
            mailDef.BodyFileName = templatePath;
            mailDef.IsBodyHtml = true;
            mailDef.Subject = "mailDefsubject";
            mailDef.From = mailMessage.From.ToString();

            ListDictionary replacements = new ListDictionary();

            replacements.Add("<%FIRSTNAME%>", FirstName);
            replacements.Add("<%USERNAME%>", "asd");
            replacements.Add("<%VERIFICATIONLINK%>", VerificationLink);     
            replacements.Add("<%WEBSITE%>", "http://www.mysite.com");

            MailMessage msgHtml = mailDef.CreateMailMessage(To, replacements, new System.Web.UI.Control());
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(msgHtml.Body, null, "text/html");

            AddLinkedResources(templatePath, ref htmlView);

            mailMessage.AlternateViews.Add(htmlView);

            SmtpClient smtpClient = new SmtpClient();
            Object userState = mailMessage;
            smtpClient.Credentials = new System.Net.NetworkCredential("myaddress@gmail.com", "1234567");
            smtpClient.EnableSsl = true;
            smtpClient.Host = "smtp.gmail.com";
            smtpClient.Port = 587;

            //Attach event handler for async callback
            smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
            try
            {               

                smtpClient.Send(mailMessage);
                EmailStatus = true;
            }
            catch (SmtpException smtpEx)
            {
                EmailStatus = false;

            }
            catch (Exception ex)
            {
                //HttpContext.Current.Response.Write(ex.InnerException);
                EmailStatus = false;

            }

web.configで私は持っています

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="noreply@asd.com">
        <network host="smtp.gmail.com" port="587"
                                       userName="asd@gmail.com"
                                       password="asd" />
      </smtp>
    </mailSettings>
  </system.net>
4

1 に答える 1

2

設定してみてください:

smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential("myaddress@gmail.com", "1234567");

また、あなたはイベントを購読しているようですSendCompletedが、このイベントは非同期で電子メールを送信するときに使用されることを目的としているため(SendAsyncメソッド)、それを取り除くことができます。使用Sendしているメソッドはブロッキングです。

次の回答をチェックアウトすることもできます。

于 2012-06-16T20:45:28.953 に答える