ホームページ >バックエンド開発 >Python チュートリアル >マーケティングメールをスパムから守るための API を構築する

マーケティングメールをスパムから守るための API を構築する

Susan Sarandon
Susan Sarandonオリジナル
2024-12-23 22:23:13649ブラウズ

電子メール マーケティング キャンペーンを実行する場合、最大の課題の 1 つは、メッセージがスパム フォルダーではなく受信トレイに確実に届くようにすることです。

Apache SpamAssassin は、メッセージをスパムとして分類するために、多くの電子メール クライアントおよび電子メール フィルタリング ツールで広く使用されているツールです。この投稿では、SpamAssassin を活用して、メールがスパムとしてマークされるかどうか、およびスパムとしてマークされる理由を検証する方法を説明します。
ロジックは API としてパッケージ化され、オンラインでデプロイされるため、ワークフローに統合できます。

Apache SpamAssassin を選ぶ理由

Apache SpamAssassin は、Apache Software Foundation によって管理されているオープンソースのスパム検出プラットフォームです。多数のルール、ベイジアン フィルタリング、およびネットワーク テストを使用して、特定の電子メールにスパムの「スコア」を割り当てます。一般に、スコア 5 以上のメールはスパムとしてフラグが立てられるリスクが高くなります。

SpamAssassin のスコアリングは透明性があり、十分に文書化されているため、電子メールのどの側面がスパム スコアの高さを引き起こしているかを正確に特定し、文章を改善するために使用することもできます。

SpamAssassin を始める

SpamAssassin は Linux システム上で実行するように設計されています。 Linux OS をインストールして実行するには、Linux OS を使用するか、Docker VM を作成する必要があります。

Debian または Ubuntu システムでは、次のコマンドを使用して SpamAssassin をインストールします。

apt-get update && apt-get install -y spamassassin
sa-update

sa-update コマンドは、SpamAssassin のルールが最新であることを保証します。

インストールすると、電子メール メッセージを SpamAssassin のコマンドライン ツールにパイプすることができます。出力には、スパム スコアを含む注釈付きバージョンの電子メールが含まれており、どのルールがトリガーされるかが説明されています。

典型的な使用法は次のようになります:

spamassassin -t < input_email.txt > results.txt

results.txt には、SpamAssassin のヘッダーとスコアを含む処理された電子メールが含まれます。

FastAPI を使用して SpamAssassin を API としてラップする

次に、件名と html_body という 2 つの電子メール フィールドを受け入れる単純な API を作成しましょう。フィールドを SpamAssassin に渡し、検証結果を返します。

FastAPI コードの例

from fastapi import FastAPI
from datetime import datetime, timezone
from email.utils import format_datetime
from pydantic import BaseModel
import subprocess
import re

def extract_analysis_details(text):
    rules_section = re.search(r"Content analysis details:.*?(pts rule name.*?description.*?)\n\n", text, re.DOTALL)
    if not rules_section:
        return []

    rules_text = rules_section.group(1)
    pattern = r"^\s*([-\d.]+)\s+(\S+)\s+(.+)$"
    rules = []
    for line in rules_text.splitlines()[1:]:
        match = re.match(pattern, line)
        if match:
            score, rule, description = match.groups()
            rules.append({
                "rule": rule,
                "score": float(score),
                "description": description.strip()
            })
    return rules

app = FastAPI()

class Email(BaseModel):
    subject: str
    html_body: str

@app.post("/spam_check")
def spam_check(email: Email):
    # assemble the full email
    message = f"""From: example@example.com
To: recipient@example.com
Subject: {email.subject}
Date: {format_datetime(datetime.now(timezone.utc))}
Content-Type: text/html; charset="UTF-8"

{email.html_body}"""

    # Run SpamAssassin and capture the output directly
    output = subprocess.run(["spamassassin", "-t"], 
                            input=message.encode('utf-8'), 
                            capture_output=True)

    output_str = output.stdout.decode('utf-8', errors='replace')
    details = extract_analysis_details(output_str)
    return {"result": details}

応答には、SpamAssassin の結果の分析詳細が含まれます。

この入力を例として見てみましょう:

subject:
Test Email

html_body:
<html>
  <body>
    <p>This is an <b>HTML</b> test email.</p>
  </body>
</html>

応答は次のようになります:

[
  {
    "rule": "MISSING_MID",
    "score": 0.1,
    "description": "Missing Message-Id: header"
  },
  {
    "rule": "NO_RECEIVED",
    "score": -0.0,
    "description": "Informational: message has no Received headers"
  },
  {
    "rule": "NO_RELAYS",
    "score": -0.0,
    "description": "Informational: message was not relayed via SMTP"
  },
  {
    "rule": "HTML_MESSAGE",
    "score": 0.0,
    "description": "BODY: HTML included in message"
  },
  {
    "rule": "MIME_HTML_ONLY",
    "score": 0.1,
    "description": "BODY: Message only has text/html MIME parts"
  },
  {
    "rule": "MIME_HEADER_CTYPE_ONLY",
    "score": 0.1,
    "description": "'Content-Type' found without required MIME headers"
  }
]

API をオンラインでデプロイする

SpamAssassin を実行するには、ソフトウェアがインストールされた Linux 環境が必要です。従来は、デプロイに EC2 インスタンスまたは DigitalOcean ドロップレットが必要になる場合がありましたが、特に使用量が少ない場合は、コストがかかり、面倒な作業になる可能性があります。

サーバーレス プラットフォームに関しては、SpamAssassin のようなシステム パッケージを実行する簡単な方法が提供されていないことがよくあります。

Leapcell を使用すると、SpamAssassin のようなシステム パッケージをデプロイしながら、サービスをサーバーレスに保つことができます。料金は呼び出しに対してのみ発生し、通常は安くなります。

Leapcell への API のデプロイは非常に簡単です。 Linux 環境のセットアップ方法や Dockerfile の構築方法について心配する必要はありません。デプロイする Python イメージを選択し、「ビルド コマンド」フィールドに適切に入力するだけです。

Build an API to Keep Your Marketing Emails Out of Spam

デプロイが完了すると、オンデマンドで呼び出すことができるエンドポイントが作成されます。 API が呼び出されるたびに、SpamAssassin が実行され、電子メールにスコアが付けられ、応答が返されます。

以上がマーケティングメールをスパムから守るための API を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。