3

注: この長い道のりを読む時間がない場合は、解決策 (ソースコード付き) がhttp://www.coastrd.com/smtpsにあります。

長い間、SMTP (ポート 25) を使用してリモート メール サーバー (通常は Web サイトのホスティング会社) 経由で電子メールを送信することは、アプリケーションを使用して簡単に行うことができました。TCPポート25を開き、「HELO ...」などを送信します

Google メール サービスを使用してこれを行うには、ポート 465 SMTPS、つまり TLS 暗号化を使用した SMTP を使用することを主張しているため、問題が発生します。

http://en.wikipedia.org/wiki/Transport_Layer_Security#How_it_works

C ++のような言語または基本的なフレーバーでこれを行う方法を研究しているときに、私は出くわしました:

http://forums.realsoftware.com/viewtopic.php?f=2&t=29542

http://forums.realsoftware.com/viewtopic.php?f=2&t=26959&p=162671#p162671

そしてPythonの質問:

python smtp gmail認証エラー(gmail smtpサーバー経由でメールを送信)

これを正しく理解している場合、C++ コードに TLS 暗号化を実装し、すべてのハンドシェイクとネゴシエーションを完了する必要がありますか?

C# の質問から:

c ++でgmail smtp(セキュアレイヤー)でメールを送信する

このライブラリはそれを行いません

http://johnwiggins.net/jwsmtp/

追加した:

多くの人は、stunnel をサービスとしてインストールし、SSL 接続を管理するように構成しています。

http://www.stunnel.org/about/

Stunnel は OpenSSL ラッパーです。OpenSSL にはいくつかのパフォーマンスの問題があります ( http://josefsson.org/gnutls4win/ )

「一部のシステムでは、libgcrypt の初期化に時間がかかります。約 10 秒かかるという報告があります。」

必要なもの: "libeay32.dll" 1.35MB + "libssl32.dll" 310k + "zlib1.dll" 75k

次に、いくつかの商用製品があります。

http://www.chilkatsoft.com/downloads.asp

この製品は、主に Activex (COM) の「dll」として配布されます (DLL を「登録」するには、ユーザーのマシンにインストーラーが必要です。.net のもう 1 つの悪い考えです)。

インストーラーは、「ChilkatMime.dll」1.33Mb、「ChilkatCert.dll」1.26MB、「ChilkatUtil.dll」720k をロードします。開発者は、C/C++/BASIC/Python などを含む任意の言語から呼び出すことができる真の C .dll ライブラリに協力することにまったく関心がありませんでした。彼らの態度を考えると、彼らが作成されたコード ジェネレーターの犠牲になったことは驚くことではありません。ハッカーによって。

安っぽい名前とアートワークを除けば、彼らの製品は手頃な価格ですが、私が試したものは、ポート 465 を使用するように言われたにもかかわらず、ポート 25 に接続しました。

対照的に、Catalyst からの商用オプション:

http://www.catalyst.com/products/sockettools/secure/library/index.html

1/3 の価格でメインのソケット ツール製品のコンポーネントとして利用できるようになりました。これらのツールは一流です。はい、あなたはあなたが支払うものを手に入れます。開発者は反応がよく、提案を受け入れます。彼らは、わずか 230k の製品と共に出荷できるスタンドアロンの .dll を含む、すべての種類の dll を提供しています。商用ソリューションの場合、彼らは圧倒されます。

SLL/TLS 接続は、明示的に (ハンドシェイクがシードを開始するとすぐに) または暗黙的に (STARTTLS などを使用したハンドシェイクの後) 行うことができます。

たとえば、CodeIgniter は暗黙的です (Python、asp、php などのオプションと同様) http://codeigniter.com/forums/viewthread/84689/

接続が確立されると、MIME セッションが進行する「トンネル」が存在します。

  "EHLO " + sLocalHost + CRLF
  "MAIL FROM: " + sMailFrom + CRLF
  "RCPT TO: " + "me@mydomain.com" + CRLF  
  "DATA: Testing, Testing xyz" + CRLF 
  CRLF + "." + CRLF
  "QUIT" 

サーバーからの通常の応答で。

一部の言語は MIME 通信を処理します (ソケット ツール、codeigniter など)。メールの件名、本文、アドレスを入力するだけで、非常に使いやすくなります。

CryptLib は、わずか 1MB (完全なコンパイル) で C スタイルの .dll を使用して SSL/TLS トンネルを容易にするオープン ソース ソリューションです。ソースが利用可能であるため、必要なコンポーネントだけを含むバージョンの dll をコンパイルすることができます。

http://www.cs.auckland.ac.nz/~pgut001/cryptlib/download.html

ライブラリをすぐに動作させ、MIME ダイアログについて尋ねていたにもかかわらず、作者は非常に反応が良かったです。330ページのマニュアルがあります!ありがとうございました。

このライブラリは MTA (メール転送エージェント) ではないため、上記の MIME 会話を作成する必要がありますが、無料です!

ソース コードは http://www.coastrd.com/smtpsで入手できます。

4

2 に答える 2

3

http://sourceforge.net/projects/libquickmail/をチェックしてください。このライブラリは、オプションの添付ファイルを含むメールを複数の受信者に送信できます。SMTP トランスポートは libcurl に依存しているため、認証や TLS などをサポートしています。C API の使い方は非常に簡単です。Linux (GCC) と Windows (MinGW) でテストされていますが、libcurl が利用可能なすべてのプラットフォームで動作するはずです。

于 2012-08-10T20:58:10.720 に答える
2

アプリケーションで TLS を有効にする必要があることは正しいです。これを自分で行う代わりに、OpenSSLを調べることをお勧めします。

さらに、Gmail 経由でトラフィックを送信するには、アカウントで SMTP を有効にし、SMTP 認証をサポートする 必要があります。

また、いくつかのポインターと、役立つ可能性のあるコードを含むC# 実装を含む重複した質問もあります。

独自のライブラリを作成するよりも使いやすいライブラリもあります (ただし、現時点では TLS をサポートしていません)。

于 2009-11-15T00:08:07.010 に答える