通常、メールメッセージの送信には SMTP プロトコルが使用されます。メッセージを送信するには SMTP サーバーへのアクセスが必要です。ネットワーク上の SMTP サーバーアドレスを特定し、ポートと暗号化方式、ログインおよび認証方法を決定します。一部のメールプロバイダーでは、アカウント設定で SMTP サーバーへのアクセスを有効にする必要があります。また、ソフトウェアで OAuth 認証を実装するのが難しい場合は、アカウント設定でアプリケーション専用のパスワードを作成してみてください。
すべての準備が整ったら、メッセージの送信を開始する時です。これには Aspose.Email for 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 マークアップ付きのメールも送信できます。送信前にメッセージにフラグを付けたり、メタデータを追加したり、暗号化したりすることも可能です。
なぜ人々はメール送信に Aspose.Email for C++ を選ぶのでしょうか?
はい、Aspose.Email for C++ は単なるメール送信ユーティリティではありません。送信、受信、保存、メール処理に関するさまざまなタスクを包括的にサポートする総合的なソリューションです。これらの作業を行う際にライブラリの制限に悩まされることはありません。私たちは長年この分野を研究し、機能を継続的に拡張しています。
最近登場したばかりの小規模なライブラリに出会ったことがあるでしょう。それらは多くのユーザーが抱える単純な問題を簡単かつ自然に解決します。しかし、少し立ち止まってみると、その控えめなライブラリを使い続けることで、代替手段としての回避策や、ライブラリの制限を抜けるためのモジュール、別の小さなライブラリと連携させるためのアダプタなど、絶えず補強が必要になることに気付くでしょう。そして、かつては便利だった小さな解決策も、もうそれほど便利ではなくなります。さらに、それをサーバーに送ると、誰も事前にテストしていない多種多様な回避策や統合が原因で、定期的に自分の足を踏み外すことになります。どんなに努力しても、やがてはそのライブラリの限界に直面せざるを得ません。新たなものを探さなければならなくなるのです。したがって、メール処理に関しては、Aspose.Email for C++ の導入を検討すべきでしょう!
SMTP 用クライアントだけをご提供するわけではありません。まず、C++ でメールを送信するプロトコルは SMTP だけではありません。当社の製品を使用すれば、Exchange EWS や Microsoft Graph を利用してメールを送信できます!
この記事ですでに MailMessage の可能性について説明しましたが、これはメール送信の準備ツールの一部に過ぎません。以下が可能です:
- TemplateEngine を使用してテンプレートからメールを生成する;
- OST、PST、MBOX 形式のサポートにより、メールが入ったコンテナを解凍する;
- IMAP、POP3、Exchange EWS、WebDav プロトコル、Microsoft Graph をサポートしてメールボックスからメールをダウンロードする;
- メールをある形式から別の形式に変換する。
Exchange EWS プロトコルを使用して簡単にメールを受信できます。メールは MAPI 形式ですが、簡単に EML 形式に変換でき、後で SMTP プロトコルで送信可能です。同時に、受信者リストや送信者をいつでも変更できます。
C++ と SMTP を使用したメール送信はどのように機能しますか?
SMTP 設定
SmtpClient クラスのインスタンスを作成した瞬間、特別なことは起きません。将来 SMTP サーバーに接続してメッセージを送信できるように設定を指定するだけです。実際の処理は、最初に… send メソッド。この瞬間何が起きているのでしょうか?
実際には、指定した設定次第です。いくつかのケースを見てみましょう。サーバーホストは指定したが、ポートと暗号化タイプを指定していない場合、自動設定選択メカニズムが起動します。このメカニズムは、標準ポートと対応する暗号化アルゴリズムを使って SMTP サーバーへの接続を順次試行します。まず暗号化チャネルでの接続を試み、失敗すると非暗号化接続を試します。プロトコルの非暗号化版を使用したくない場合は、 SecurityOptions.SSL_AUTO 設定。この設定はサーバー設定を選択できますが、暗号化チャネルのみをチェックします。
サーバーへの接続が確立できた場合、認証が試みられます。認証に失敗するとエラーコードが保存され、以降の試行で使用されます。マッチャーは他の接続方法を試みます。接続とログインが可能であればメッセージは送信されます。接続に失敗した場合、ユーザーは認証エラーコードを受け取ります(選択時に保存されていれば)。これにより、パスワードが間違っているなどのミスが分かります。ポートや暗号化方式の選択肢がすべて合わず、認証試行すら行えなかった場合、サーバー設定が不正である旨のエラーが通知されます。
ちなみに、当社の SmtpClient(他のライブラリクライアントと同様)はプロキシ経由で SMTP サーバーに接続できます。初期化時にプロキシサーバー設定を指定することも可能です。
SMTP クライアント認証
SmtpClient は接続方式だけでなく、さまざまな認証方式もサポートしています。たとえば OAuth メカニズムを使用できます。そのために、複数のツールを一括で提供しています。
まず TokenProvider です。これは OAuth トークンの保存とリフレッシュに必要なすべてのデータを保持するクラスです。この場合、OAuth 認証は自分で実行し、OAuth サーバーから受け取った必要情報を保存する必要があります。RefreshToken はここで重要な役割を果たします。これは AccessToken と共に認可サーバーが発行する追加トークンで、通常 AccessToken は一定期間しか有効でありませんが、RefreshToken ははるかに長期間、あるいはユーザーが取り消すまで(無期限)有効です。RefreshToken により、TokenProvider クラスは AccessToken が無効になった際に常に新しい AccessToken を取得できます。
別の選択肢として ITokenProvider インターフェイスがあります。この場合、OAuth メカニズムを自分で実装するだけでなく、必要に応じて SmtpClient に渡して自動的に使用させることができます。
OAuth メカニズムが常に必要というわけではないことに注意してください。ユーザー名とパスワードでログインする方が簡単な場合もあります。その場合、メールアカウントの再設定や二要素認証の無効化は不要です。より安全な方法として、アプリケーション専用のパスワードがあります。この機能を利用するにはメールアカウント設定を確認してください。多くの場合、アカウントで設定するとアプリケーション用パスワードが自動的に生成されますので、忘れずに保存してください。設定時にはアプリケーションの権限をできるだけ限定することをおすすめします。たとえ攻撃者がこのパスワードを取得しても、アカウント全体を乗っ取ることはできませんが、依然として不快な操作を行う可能性があります。この点は注意が必要です。総じて、このツールは非常に便利ですが、アカウントのセキュリティは低下します。自己責任で使用してください。
C++ で SMTP を使用したメール送信
サーバーへの接続が確立し、認証に成功しました。次はメールの送信です。送信には MailMessage クラスのオブジェクトを使用します。技術的には必要なデータを直接 send メソッドに渡すこともできますが、実際にはそれらは MailMessage オブジェクトに集約されます。その後、MailMessage クラスが EML 形式へシリアライズできるため、SMTP サーバーに渡せるデータストリームを取得します。これにより、サーバーにメール送信コマンドを送り、メールの内容をテキストデータとして転送します。メールにバイナリデータ(例:添付ファイル)が含まれる場合、データは Base64 形式でエンコードされ、メールのメタデータに受信側がデコードする必要があることが示されます。SMTP サーバーは受信したメッセージの正当性をチェックでき(例:FROM フィールドとサーバー上の送信者アカウントを照合)、必要に応じてメタデータを補完します。その後、サーバーはメールのメタデータから取得した受信者リストに基づき、メールを送信します。