2017-11-07 8 views
1

こんにちは、私はmvc5のC#でWebアプリケーションを開発しています。私はsslモードで私のウェブサイトをホストしています。私は以下のコードをプロダクションサーバーで電子メールを送信するために使用しています。sslモードでポート25を使用して電子メールを送信できません。

   string AdminEmail = ConfigurationManager.AppSettings["AdminEmail"].ToString(); 
       MailMessage mail = new MailMessage(); 
       mail.To.Add(emailid); 
       mail.Bcc.Add(AdminEmail); 
       mail.From = new MailAddress(MailID); 
       mail.Subject = Subject; 
       mail.Body = Body; 
       mail.IsBodyHtml = true; 
       SmtpClient smtp = new SmtpClient(hostserver); 
       smtp.Credentials = new System.Net.NetworkCredential 
       (MailID, Password); 
       smtp.Send(mail); 
       return 1; 

私はIsInternalBuildは、本番環境で真である

if (IsInternalBuild) 
       { 
        smtp.Host = hostserver; mail.c3payroll.com 
        smtp.Port = Convert.ToInt32(portno); 465 
        smtp.UseDefaultCredentials = true; 
        smtp.EnableSsl = true; 
       } 

を追加しました。

SSLモードで送信し、私は上記のコードで何かを変更する必要がありますか?誰かがこれを実装するのを助けることができますか?どんな助けもありがとう。ありがとうございました。

+0

あなたはこれを探していますか? 'smtp.EnableSsl = true;'?私はそのプロパティを設定することでSSLサポートを有効にする必要があると思います( 'smtp.Port = 25'と' smtp.Host = "[email protected].com")。 –

+0

最初に意味するSSLを明確にする必要があります。 (暗黙のSSL(ポート465、SMTPセッション開始前にSSL交渉、SmtpClientでサポートされていない)と明示SSL(ポート25、最初のSMTPセッションは暗号化されずに開始され、SSLは交渉され、EnableSSLプロパティでSmtpClientによってサポートされます) – Evk

+0

ありがとうございました。私はホスティング中にSSL証明書を使用しています。だから私は上記のコードで変更する必要がありますか? –

答えて

1

あなたがポート25でSSLの電子メールを送信カント、あなたの代わりに

をポート465を使用する必要があります。また、メールホストプロバイダの設定によってはsmtp.EnableSsl = true

+0

ありがとうAlandar。私はGmailを使用していませんが、私自身のmail.c3payroll.comと@host 25を使用しています。これでうまくいかないでしょうか? –

+1

ポート465はSMTPSの標準ポートです。ホストがSMTPSをサポートする場合は465をサポートします。サポートされていないポート25でSMTPSを送信することはできません – Alander

+0

今、smtpを465に設定する必要がありますか?私はクライアントに共有することができ、私は彼らを説得することができるようにいくつかのリンクを得ることができますか? –

2

を設定する必要があり、それはホスト名を設定するのは簡単です、ポートSmtpClientに対応するプロパティを使用してメールを送信する番号とSSLの機能:

SmtpClient smtp = new SmtpClient(hostserver); 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtp.Credentials = new System.Net.NetworkCredential(MailID, Password); 
smtp.Host = hostserver; // host name as mail server 
smtp.Port = Convert.ToInt32(portno); // some hosts doesn't support port 25 for SMTPS, try this port instead or use 587 
smtp.EnableSsl = true; // use SSL configuration 

smtp.Send(mail); 

更新(明示的&暗黙SSL)

System.Net.Mail.SmtpClientのみTLSと交渉するためにポート25を超えるSMTPサーバへの安全でない接続を必要とする明示的なSSLをサポートしていることに注意してください。そこに確立SMTPサーバへ接続する前にTLSネゴシエーションを必要とポート465のためのSMTP over SSLのですが、それでも標準System.Net.Mailライブラリとの暗黙のSSLをサポートしていません。その理由はat this referenceです。

System.Net.Mailで暗黙的なSSL(SMTPS)を使用する方法はありません。 暗黙のSSLは、全体の接続がSSL 層に包まれています。特定のポートが使用されます(ポート465は共通です)。暗黙のSSLをカバーする正式なRFCがない があります。

暗黙のSSLのような何かを行く:SSL(暗号化を開始) [スタート] - > [接続] - > [認証を - >これはバグとはみなされません

、それは設計でのデータを送信します。はSMTPのため SSL認証の2種類があり、我々は唯一の(デザインによって) System.Net.Mailと1をサポート - 明示的なSSLを。

が暗黙のSSLを使用するには、(、時代遅れのようですが、両方の明示的および暗黙的SSLと連携動作するようにCDO構成スキーマを必要とする)は、 System.Web.Mail.MailMessageSystem.Web.Mail.SmtpMailなどのCDOSYSを可能に図書館を利用する必要があります。

System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage(); 
mail.To = emailid; 
mail.Bcc = AdminEmail; 
mail.From = new MailAddress(MailID); 
mail.Subject = Subject; 
mail.Body = Body; 
mail.BodyEncoding = System.Text.Encoding.UTF8; 
mail.BodyFormat = System.Web.Mail.MailFormat.Html; 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", hostServer); 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25); 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2); 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true); 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1); 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", MailID); 
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Password); 

System.Web.Mail.SmtpMail.SmtpServer = hostServer; 
System.Web.Mail.SmtpMail.Send(mail); 

関連問題:

How can I send emails through SSL SMTP with the .NET Framework?

+0

本当にそれを試しましたか? SmtpClientの文書では、SMTP over SSLはサポートされていないと主張しているため(EnableSSLは別のことを意味する - STARTTLS拡張)。 – Evk

+0

ありがとう哲也。 SMTPクライアントはSSLで動作しませんか?電子メールを送信する他の方法はありますか? –

+0

@ NiranjanGodbole暗黙的かつ明示的なSSLの説明で更新されています。サーバーでサポートされていない*暗黙のSSL *を使用すると思われます。 TLSメソッドで暗黙のSSLをサポートする別のサーバーを使用してみてください(現在のサーバー以外のサーバーと 'hostServer'値を変更してください)。 –

1

SMTPでSSLを使用する複数の方法があります。 SMTPセッションを開始する前にsslをネゴシエートした場合(httpsに似ています)、1つは「暗黙的」なSSLです。そのために、1つの別個のポートが通常使用される(465)。この方法はdocumentationに述べたように、SmtpClientによってサポートされていない

任意のプロトコルコマンドが送信される前にSSLセッションがフロントアップ を確立している場合、代替の接続方法です。この接続方法 は、SMTP/SSL、SMTP over SSL、またはSMTPSと呼ばれることもあり、デフォルトでは はポート465を使用します。SSLを使用したこの代替接続方法は現在 ではありません。

もう1つはSTARTTLS拡張です。この方法では、通常のSMTPセッションの一部としてsslをネゴシエートします。これは暗号化されずに(通常25ポートで)開始されます。通常のHELO交換クライアントが "250 STARTTLS"コマンドを発行した後(サーバーがサポートしている場合) - sslがネゴシエートされ、セッションは暗号化を続けます。この方法は、EnableSslプロパティを持つSmtpClientによってサポートされています。 trueに設定すると、sslとSTARTTLSを交渉しようとします。サーバーがそれをサポートしていない場合、例外がスローされます。

ただし、mail.c3payroll.com smtpサーバーは上記の方法のいずれもサポートしていません。あなたは25ポートでそれにtelnetすることができ、HELOの後で "250 STARTTLS"を実行しようとすると、サポートされていないとあなたに伝えられます。ポート465もそこでは使用できません。だからあなたがあなたのsmtpセッションにsslを使いたいのであれば、最初に通常のsmptサーバを見つけてください。

+0

こんにちはEVK。あなたが気にしないなら、あなたはチームビューアを持っていますか? –

+0

私はやっていますが、とにかくteamviewer経由でサポートを提供するつもりはありません – Evk

+0

ありがとうございます。しかし、あなたは非常に有用な情報を与えました。だから私はまずSMTPサーバーにテストするためにtelnetする必要がありますか? –

関連する問題