私は小さな会社の内部管理アプリを持っています。これはPythonで記述され、Linode VPSで実行されており、ユーザーはこれを使用して顧客に不定期にメールを送信できます。メールは非常に単純です。テキスト部分です。 (つまり、HTMLではない)PDF請求書の添付ファイル、email
stdlibモジュールで作成され、外部SMTPサーバー(VPSでホストされていない)を介して送信されます。
しばらくの間、すべてが非常にスムーズに実行されていましたが、最近、受信メールサーバーによって電子メールがスパムとして分類されることが多いという苦情を受けています。テストメールを http://www.mail-tester.com に送信しましたが、不足しているヘッダー(特に、Date
とMessage-ID
)をいくつか追加すると次のことがわかりました。メッセージの「スパム性」レベルを下げます。ただし、SPF関連のSpamAssassinの問題が1つあり、それでも私にはわかりません。
SPF_HELO_SOFTFAIL SPF: HELO does not match SPF record (softfail)
Gmailアカウントにテストメールを送信してみました。「オリジナルを表示」を実行すると、関連するヘッダーが表示されます。
Received-SPF: pass (google.com: domain of <sender_address> designates <ip_smtp_server> as permitted sender) client-ip=<ip_smtp_server>;
Received: from [<ip_linode_vps>] (helo=<domain_name_linode_vps>)
これと私があちこちで集めたいくつかの追加情報から、SMTPサーバードメインのSPFレコード(TXTとしてすでに存在している)を何らかの方法で変更することで、この問題を修正できると確信しています。 = "v=spf1 a mx... ~all"
へのip4
参照を含む<ip_smtp_server>
文字列を使用して記録しますが、私の現在の理解ではそうするのに十分ではないので、助けていただければ幸いです。
更新:
<ip_linode_vps> = 69.164.216.89
<domain_name_linode_vps> = li131-89.members.linode.com
<ip_smtp_server> = 192.99.17.51
<domain_name_smtp_server> = mail.roucet.com
<already_existing_spf_record> = "v=spf1 a mx ip4:192.99.17.51 ip4:158.85.89.116 ip4:158.85.77.121 ~all"
承認されたすべてのメールサーバーは、SPFレコードにリストされている必要があります。これで新しい承認済みメールサーバーができたので、追加する必要があります。一部のSPAMチェックは、リストされている(A、MX)と許可されている(〜all)を区別し、リストされていないアドレスをパスとして扱いません。これは、承認されたサーバー(多くの場合スパムボット)を介して送信しない送信者にペナルティーを科します。 ~all
ポリシーは、電子メールがブロックまたは隔離される可能性がある-all
ポリシーと比較して、ユーザーがドメインを使用するユーザーを実際には気にしないことを示します。
別のアプローチは、既存のサーバーを使用してメッセージを中継するように新しいサーバーを構成することです。アプリケーションでは、電子メールリレーサーバーの構成を許可するのが一般的です。 Pythonでは、localhostの代わりにVPSサーバー名を構成します。
どのサーバーが電子メールを送信していても、アプリケーションからメッセージを受信するときに必要なヘッダーを追加する必要があります。または、アプリケーションにヘッダーを追加することもできます。 Dateヘッダーには、日付の定義済みフォーマットがあります。 Message-idヘッダーには定義済みの形式がありますが、それほど厳密ではありません。メッセージIDはメールアドレスに似ていますが、左側は一意のIDである必要があります。