Aspose.Email  C++ 用

C++ に電子メールを送信

C++ と SMTP を使用して添付ファイル付きの電子メールまたは iCalendar を送信する方法

  ダウンロード无料トライアル

原則として、SMTPプロトコルは電子メールメッセージの送信に使用されます。メッセージを送信するには、SMTP サーバーにアクセスする必要があります。ネットワーク上の SMTP サーバーのアドレスを調べ、暗号化のポートとタイプ、ログイン、認証方法を決定する必要があります。一部のメールプロバイダーでは、アカウント設定で SMTP サーバーへのアクセスを有効にする必要があります。また、ソフトウェアに OAuth 認証を実装するのが苦手な場合は、アカウント設定でアプリケーション用に別のパスワードを作成してみてください。

準備作業をすべて完了したら、メッセージの送信を開始します。これには Aspose.Email C++ 用 ライブラリを使用できます。最も単純な例を考えてみましょう。

auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");

このオプションは、シンプルなテキストメールを送信する場合に使用します。

C++ を使用して添付ファイル付きのメールを送信する

C++ を使用して複雑な電子メールメッセージを送信する必要がある場合、MailMessage クラスは間違いなく便利です。例えば、前のメッセージと似たようなメッセージを送信するには:

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

MailMessage クラスは素晴らしいツールです。EML および MSG (Outlook メッセージフォーマット) ファイル形式で保存されたメッセージを送信できます。この形式を使用して添付ファイルを送信したり、iCalendar オブジェクトを送信して出席を設定したり確認したりすることもできます。MailMessage を使うと、受信者、Cc 受信者、BCC 受信者のリストを微調整できます。HTML マークアップを含むメールを送信できます。送信前にメッセージにさまざまなフラグを付けたり、メタデータを追加したり、暗号化したりすることもできます。

なぜ人々は電子メールの送信にC++用のAspose.Emailを選ぶのですか?

はい、Aspose.Email C++ 用は単なる電子メールメッセージを送信するためのユーティリティではありません。これは、電子メールの送信、受信、保存、処理に関連するさまざまなタスクを包括的にサポートする包括的なソリューションです。また、これらのタスクを実行しても、ライブラリの制限にぶつかることはありません。私たちはこのトピックを長年研究してきており、常に機能を拡張しています。

比較的最近登場した小さな図書館に出くわしたことがあるでしょう。多くのユーザーが直面する単純な問題を簡単かつ自然に解決します。しかし、少し脇に足を踏み入れるとすぐに、この気取らない問題を使い続けることで、常に松葉杖を囲んだり、ライブラリの制限を回避するためのモジュールや、小さなライブラリと別の小さなライブラリと友達になるように設計されたアダプターなどを常にフェンスで囲むことを余儀なくされることに気づきます。そして今、あなたのちょっとした気の利いた解決策は、もうそれほど気の利いたものではありません。さらに、それをサーバーに送信すると、定期的かつ一貫して足元を撃ちます。これは、これまで誰も松葉杖やインテグレーションの動物園をテストしたことがないからです。そして、どんなに頑張っても、遅かれ早かれ、このライブラリの限界にぶつかるでしょう。そして、何か新しいものを探さなければなりません。ですから、電子メールを扱うことになると、C++ 用の Aspose.Email を検討したくなるかもしれません。

SMTPを扱うだけのクライアントではありません。まず、C++ でメールを送信するためのプロトコルは、これだけではありません。当社の製品では、Exchange EWS と Microsoft Graph を使ってメールを送信できます!

MailMessageの可能性については、この記事ですでに説明しました。しかし、これは手紙を送るための唯一のツールではありません。次のことができます。

  • テンプレートエンジンを使用してテンプレートからレターを生成します。
  • OST、PST、およびMBOX形式のサポートにより、文字付きのコンテナを開梱できます。
  • IMAP、POP3、Exchange EWS、WebDAVプロトコル、およびマイクロソフトグラフのサポートを使用して、メールボックスからレターをダウンロードします。
  • メールをある形式から別の形式に変換します。

Exchange Ews プロトコルを使用すると、簡単にレターを受け取ることができます。MAPI 形式になります。ただし、EML 形式に簡単に変換できるので、後で SMTP プロトコル経由で送信できます。同時に、受信者のリストやレターの送信者はいつでも変更できます。

C++とSMTPを使用して電子メールを送信する方法を教えてください。

SMTP コンフィギュレーション

SmtpClient クラスのインスタンスを作成した瞬間には、特別なことは何も起こりません。後で SMTP サーバーに接続してメッセージを送信できるようにする設定の数を指定するだけです。すべての魔法は、への最初の呼び出しで起こります。 send 方法。今何が起きているの?

実際、それはすべて指定した設定によって異なります。いくつかの選択肢を考えてみましょう。サーバーホストは指定したが、ポートと暗号化タイプは指定していないとしましょう。この場合、設定が自動的に選択される仕組みが起動します。このメカニズムは、標準ポートとそれに対応する暗号化アルゴリズムを使用して SMTP サーバーへの接続を連続して試行することで構成されます。まず、暗号化されたチャネルを介してサーバーに接続しようとします。しかし、接続に失敗すると、メカニズムは暗号化されていない接続を確立しようとします。暗号化されていないバージョンのプロトコルを使用したくない場合は、以下を指定してください。 SecurityOptions.SSL_AUTO 設定。この設定ではサーバー設定を選択することもできますが、チェックされるのは暗号化されたチャンネルのみです。

サーバーとの接続を確立できた場合は、認証が試みられます。認証に失敗した場合、エラーコードは今後のために保存されます。マッチャーは他の方法で接続を試みます。接続してログインできれば、メッセージが送信されます。接続に失敗すると、ユーザーは認証エラーコードを受け取ります (選択中に保存されている場合)。これにより、ユーザーは自分が間違ったパスワードを入力したこと、またはその他の間違いを犯したことを理解できます。ポートと暗号化タイプのオプションがどれも適合せず、認証を試みることができなかった場合、ユーザーはサーバー設定が正しくないことを通知するエラーを受け取ります。

ちなみに、SmtpClient(ライブラリの他のすべてのクライアントと同様)はプロキシ経由でSMTPサーバーに接続できることに注意してください。初期化中にプロキシサーバー設定を指定することもできます。

SMTP クライアント認証

SmtpClientは、さまざまな接続方法をサポートするだけではありません。また、さまざまな認証方法もサポートしています。たとえば、OAuth メカニズムを使用できます。そのために、複数のツールを一度に用意しています。

まず第一に、それはトークンプロバイダーです。このクラスには、OAuth トークンの保存と更新に必要なデータがすべて含まれています。この場合、OAuth 認証を自分で行い、OAuth サーバーから受け取った必要な情報をすべて保存する必要があります。ここでは RefreshToken が重要な役割を果たします。これは AccessToken と並んで承認サーバーによって発行される追加トークンです。両者の違いは、AccessToken は原則として一定期間のみ有効である点です。一方、RefreshTokenはもっと長い期間、あるいは無期限 (ユーザーがそれを取り消すまで) 有効です。RefreshToken のおかげで、TokenProvider クラスはアクセストークンが有効でなくなった場合にいつでもアクセストークンを更新できます。

もう 1 つのオプションは ITokenProvider インターフェイスです。この場合、OAuth メカニズムを自分で実装できるだけでなく、それを SmtpClient に渡して、必要に応じてそのメカニズム自体を使用するようにすることもできます。

OAuth メカニズムは必ずしも必要ではないことに注意してください。ユーザー名とパスワードでログインした方がはるかに簡単な場合もあります。そのためには、メールアカウントを再設定したり、二段階認証を拒否したりする必要はまったくありませんが、より安全な解決策があります。これはアプリケーション用の別のパスワードです。この機能を利用するには、メールアカウントの設定を確認する必要があります。ほとんどの場合、アプリケーションのパスワードは、アカウントでアプリケーションを設定したときに自動的に生成されます。忘れずにどこかに保存してください。また、設定中はアプリケーションの権限をできるだけ制限することをおすすめします。もちろん、攻撃者がこのパスワードにアクセスした場合、その攻撃者はあなたのアカウントを不正利用することはできませんが、それでも多くの不愉快なことをする可能性があります。侵入者からデータを保護するのはパスワードだけなので、ここでは何もできません。一般的に、このツールは非常に便利ですが、アカウントのセキュリティを低下させるため、自己責任で使用してください。

C++ を使用して SMTP 経由で電子メールを送信する

これで、サーバーへの接続が確立され、認証が成功しました。手紙を送る時が来ました。送信には MailMessage クラスのオブジェクトが使用されます。技術的には、必要なデータをすべて send メソッドに渡すだけで済みます。しかし実際には、これらのデータは引き続き MailMessage オブジェクトに収集されます。さらに、MailMessage クラスが EML 形式にシリアル化できるおかげで、必要なデータストリームを取得して SMTP サーバーに渡すことができます。そこで、レターを送信し、レターのすべての内容をテキストデータの形式で転送するコマンドをサーバーに与えます。バイナリデータが、たとえば添付ファイルの形式でレターで送信される場合、このデータは Base64 形式でエンコードされ、レターのメタデータには、受信者がそれをデコードし直す必要があることが示されます。SMTP サーバーは、受信したメッセージの正しさをチェックしたり (たとえば、サーバー上の送信者アカウントで FROM フィールドをチェックしたり) できるほか、メッセージのメタデータを自由に補足できます。その後、サーバーは受信者にメールを送信し、そのリストもメールのメタデータから取得します。