Aspose.Email  C++ 用

C++ で Gmail アドレスを生成

C++ を使用してパスワード付きの一時 Gmail ジェネレータを作成する

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

Gmail ジェネレータは、メール購読を管理する一般的な方法です。本質的には、一時的なメールアドレス提供サービスのアナログですが、はるかに柔軟で信頼性が高く安全です。

ジェネレータの本質は、追加の Gmail アドレスを作成することです。これらのアドレスは各種ウェブサイトへの登録時に使用できます。サイトは提供されたアドレスにメールを送信するでしょう。追加アドレスはアプリケーションで生成するか手動で作成され、メールの受信者として指定されます。

受信者アドレスでメールを検索すれば、メールをフィルタリングし、自動的に処理(一次的または永続的)を実行できます。また、同意なくアドレスを第三者と共有しているウェブサイトを検出することも可能です。

例えば、username+for.spam.sender@gmail.com という追加アドレスを生成したとします。このアドレスを spam-sender.com に渡します。しばらくすると、他のサイト(例: other-sender.com)からメールが届き、受信者は username+for.spam.sender@gmail.com となります。他のサイトがなぜプロモーションメールを送ってくるのかは分かりませんが、代替アドレスを使用したことで、spam-sender.com があなたのアドレスを第三者と共有したことが容易に分かります。その場合、これらのサイトのメーリングリストから退会する意味はありません。追加アドレスはすでに不要メール送信のための公開リストに含まれている可能性が高いです。この追加アドレス宛のメールをすべてブロックすれば、はるかに簡単です。さらに、これらのメールを自動的にスパムフォルダに移動させる設定ができれば、さらに効果的です。この設定により、これらのサイトは Gmail がスパム送信していることを認識するため、メール送信が非常に困難になります。

それでは、Aspose.Email for C++ を使用してこのジェネレータを実装する方法を見てみましょう。

一時 Gmail を生成し操作する

追加の Gmail アドレスを生成するために Aspose.Email は必要ありませんし、Gmail サービスとやり取りする必要もありません。手動またはランダムに作成した、一定のルールに従った追加アドレスであれば機能します。

では、このルールとは何でしょうか?

ピリオドは重要ではありません。つまり、アドレスの ‘@’ 記号の前で、ドットを削除したり任意の文字間に新たにドットを追加したりできます。

‘@’ の前に ‘+’ を入れ、任意の文字や数字の組み合わせを付加できます。例として “username@gmail.com” の場合は以下の通りです:

これらすべてのアドレスは、ウェブサイトへの登録時にすでに使用できます。ただし、単独ではあまり意味がありません。すべてのメールがメインのメールボックスに届くためです。したがって、これらのアドレスを扱う手順を使用する価値があります。

シンプルな一時 Gmail ジェネレータ

それでは、シンプルなランダムサブアドレスジェネレータを作成しましょう。’+’ と ‘@’ の間にランダムな文字列を挿入します。まず、特定の文字セットで構成された一定の長さのランダム文字列を生成する必要があります。

const char16_t pattern[] = u"abcdefghijklmnopqrstuvwxyz0123456789";
auto patternLength = std::char_traits<char16_t>::length(pattern);
const int suffixLength = 10;
std::string generatedSuffix;
generatedSuffix.reserve(suffixLength);
srand(time(NULL));
for (int i = 0; i < suffixLength; i++)
{
    generatedSuffix += pattern[rand() % (patternLength - 1)];
}

次に、メールアドレスを取得し、生成したランダム文字列を付加する必要があります。そのために、Aspose.Email for C++ ライブラリの <a href="https://reference.aspose.com/email/cpp/class/aspose.email.mail_address/" rel="nofollow noopener" target="_blank">MailAdress クラスを使用します:

auto originalAddress = System::MakeObject<MailAddress>(System::String(u"some.address@gmail.com"));
auto generatedAddress = System::MakeObject<MailAddress>(
    originalAddress->get_User() + u"+" + generatedSuffix + u"@" + originalAddress->get_Host());
Console::WriteLine(generatedAddress);

完了です!取得したアドレスはすでにウェブサイトでの登録に使用できます。サイトはこのアドレスにメールを送信し始めます。これらのメッセージで何ができるか見てみましょう。

生成された Gmail で受信したメッセージを操作するために IMAP クライアントを使用する

まず、追加アドレスで受信したメッセージを操作するには Gmail に接続する必要があります。そのために IMAP が適しています。このプロトコルで接続する際は、アカウント設定で IMAP 接続を許可しておくことを忘れないでください。また、専用のアプリ パスワードを使用すれば、OAuth 認可を実装したくない場合でも IMAP 接続を簡素化できます。Google アカウント設定のセキュリティセクションでアプリ パスワードを追加し、生成されたパスワードを安全な場所に保存して紛失しないようにしてください。これにより、メールへのフルアクセスが可能になります。

それでは、<a rel="nofollow noopener" target="_blank" href="https://reference.aspose.com/email/cpp/class/aspose.email.clients.imap.imap_client/">ImapClient クラスを使用し、IMAP プロトコルで Gmail アカウントに接続しましょう:

auto imapClient = System::MakeObject<Clients::Imap::ImapClient>(
    u"imap.gmail.com", 993, originalAddress->get_User(), u"password",
    SecurityOptions::SSLAuto);

完了しました。例えば、生成された Gmail アドレスで受信したすべてのメッセージを取得できます:

imapClient->SelectFolder(u"INBOX");
auto queryBuilder = System::MakeObject<ImapQueryBuilder>();
queryBuilder->get_To()->Contains(generatedAddress->get_Address());

auto list = imapClient->ListMessages(queryBuilder->GetQuery());

そして、これらのメールはすべて受信できます。どのサイトから来たかは関係ありません。生成したメールアドレスを提供したサイトから、または別のサイトから、どのアドレスでも構いません。送信者ではなく受信者でメールをフィルタリングします。非常に便利です。

一時 Gmail に受信したメッセージをマーク、削除、移動する

メール一覧を取得したら、さまざまな操作を一括で実行できます。メールボックスで個別に探す必要はありません。数行のコマンドで全てのメールを既読にしたり、別フォルダーに移動したり、削除したりできます。ただし、実行前にリストが空でないことを確認してください。すでに全て削除している可能性があります。

if (list->get_Count() > 0)
{
    //Mark as read
    imapClient->AddMessageFlags(list, ImapMessageFlags::get_IsRead());
    //Move
    imapClient->MoveMessages(list, u"DestinationFolder");
    //Remove
    imapClient->DeleteMessages(list, true);
}

完了、受信トレイのスパムがすべてクリアされました。

一時 Gmail アドレスを購読

上記のコードを手動で呼び出してメールを継続的に削除またはフラグ付けしたくない場合はどうでしょうか?受信したらすぐにメールを削除したい場合はどうでしょうか?例えば、新しいメッセージを購読し、メールアドレスに届いたらすぐに削除する関数を書けば実現できます。

std::function<void(System::SharedPtr<System::Object> sender, System::SharedPtr<Clients::Imap::ImapMonitoringEventArgs> eventArgs)> subscribeCallback =
[&generatedAddress, &imapClient](System::SharedPtr<System::Object> sender, System::SharedPtr<ImapMonitoringEventArgs> eventArgs)
{
    auto newMessages = eventArgs->get_NewMessages();
    auto generated = System::MakeObject<ImapMessageInfoCollection>();
    for each (auto newMessage in newMessages)
    {
        for each (auto address in newMessage->get_To())
        {
            if (address->get_Address() == generatedAddress->get_Address())
            {
                generated->Add(newMessage);
                break;
            }
        }
    }
    if (generated->get_Count() == 0) return;

    imapClient->SelectFolder(u"INBOX");

    //Do something with the received messages. For example, mark them as read:
    imapClient->AddMessageFlags(generated, ImapMessageFlags::get_IsRead());

    //or delete them
    imapClient->DeleteMessages(generated, true);
};

std::function<void(System::SharedPtr<System::Object> sender, System::SharedPtr<Clients::Imap::ImapMonitoringErrorEventArgs> eventArgs)> errorCallback =
[](System::SharedPtr<System::Object> _, System::SharedPtr<ImapMonitoringErrorEventArgs> errorEventArgs)
{
    Console::WriteLine(errorEventArgs->get_Error()->get_Message());
};

imapClient->StartMonitoring(subscribeCallback, errorCallback, u"INBOX");

このアルゴリズムはエラー発生時に新規メッセージの購読が中断されるため、やや簡略化されています。アルゴリズムを大幅に改善できます。そのためにはエラーハンドリングを強化してアルゴリズムを洗練させる必要があります。例えば、エラー時に監視を再開できるように設定できます。その際は ImapClient.ResumeMonitoring 関数を使用します。この関数は IMAP サーバへの接続を再確立し、新しいメッセージの監視を再開します。

残念ながら、このアルゴリズムを使用するにはプログラムを常に実行し続ける必要があります。プログラムの実行を中断すると、新しいメールは自動的に削除されなくなります。しかし、別の解決策があります。

生成された Gmail アドレスへのメッセージ受信を停止する

Gmail は受信メッセージをフィルタリングするアルゴリズムを提供しています。これらのアルゴリズムはサービス側で動作し、適切に設定すれば不要なメールを通さないようにします。残念ながら現時点では C++ からリモートでこれらのフィルタを設定する機能は提供できませんが、近い将来この機能を追加する予定です。ぜひ更新情報をご確認ください!

生成された Gmail に届くメッセージをフィルタリングしたい場合、まずフィルタ用の検索テンプレートを作成する必要があります。以下はテンプレートを取得する最もシンプルなコードです:

//Generate Gmail search pattern
auto searchPattern = System::String(u"to:(") + generatedAddress->get_Address() + u")";
Console::WriteLine(searchPattern);

ここで、変数 generatedAddress この記事の前半で作成した生成済み Gmail が含まれています。上記のコードは検索テンプレートを作成し、ターミナルに出力します。フィルタ作成時に必要になるので、このテンプレートをコピーしてください。

それでは、フィルタの作成手順をステップバイステップで説明します。まず、Gmail のウェブインターフェイスを開きます。以下の<a href="https://mail.google.com/mail" rel="nofollow noopener" target="_blank">リンクからアクセスできます。このインターフェイスで検索バーを見つけてください:

ステップ1

この検索バーに、先ほどの手順で生成されたテンプレートを挿入する必要があります。次に、下のスクリーンショットで示されている「Show search options」ボタンをクリックします:

ステップ2

開く検索オプションウィンドウでは、追加のデータを入力する必要はありません。生成されたテンプレートはすでに検索を設定しています。"Create filter" ボタンをクリックするだけです。

ステップ3

その結果、フィルタ設定ウィンドウが開きます:

ステップ4

ここでは、生成された Gmail アドレスで受信したメールに対してフィルタが何をするかを選択できます。自動でアーカイブ、既読にする、削除するなどが可能です。通常はメールを削除するのが最適です。メールボックス容量は限られているため、不要なメールで容量を消費する意味はありません。希望のアクションを選択したら、再度「フィルタ作成」ボタンをクリックしてください。

完了!フィルタが完全に設定されたので、これ以上ジャンクメールに悩まされません。

一時 Gmail フィルタの管理

特定のウェブサイトから受信するメッセージが不要になってくることがあります。メールボックスに不要なゴミが増え、重要で面白いものを見つけにくくなります。そのため、そのウェブサイトからの不要なメッセージをブロックするフィルタを作成します。しかし、もしそのサイトからのメッセージがもはやスパムでなくなったらどうでしょうか。例えば、パスワードを復元したいときなどです。ウェブサイトからパスワードリセットフォームへのリンクが記載されたメールが送られてきますが、フィルタが即座にメールを削除してしまうため受信できません。

幸いにも、この状況から抜け出すエレガントな方法があります。フィルタを一時的に再設定してメールを削除しないようにするか、フィルタ自体を完全に削除することができます。やり方をご紹介します。

まず、Gmail のウェブインターフェイスを開きます。開いたページで「Settings」ボタンをクリックしてください:

ステップ1

開いたウィンドウで「See all settings」ボタンをクリックしてください:

ステップ2

Gmail アカウント設定ウィンドウが開きます。メール体験を細かく調整できる多数のタブが含まれています。ここでは「Filters and Blocked Addresses」タブに注目します。このタブを開いてください:

ステップ3

開いたタブには、以前作成した生成済み Gmail 用のフィルタ一覧と、他のフィルタが表示される場合があります:

ステップ4

フィルタの説明から、解除したいアドレスに対応するフィルタを簡単に特定できます。「delete」ボタンをクリックすればフィルタを完全に無効化できます。「edit」ボタンをクリックすればフィルタを再設定できます。例えば、メールを削除する代わりにフラグを付けるように変更できます。これによりフィルタを保存し、将来的に有効化しやすくなります。フィルタを編集すれば、必要なメールをサイトから受信できるようになります。再度生成された Gmail をブロックしたくなったら、「edit」ボタンでフィルタを開き、アクションを再設定してください。

以上です。これで、生成された Gmail アドレスのプロになりました。膨大な数のアドレスを作成し、Gmail に届くメールの流れを巧みに管理できます。追加のアドレスを使用すれば、あなたの同意なくデータを第三者に転送するサイトを追跡でき、スパムをブロックする際にアンチスパムシステムを再学習させたり、退会ボタンを何度もクリックしたりする必要がなくなります。Aspose.Email .NET を使用してスパム除去を自動化することも、設定や Gmail インターフェイスを手動で操作することも可能です。