16

TL;DR:共有ホスティング (Unoeuro や One.com の安価なドメインなど) から送信されたメールは、最終的にスパムになります。直し方?


最初に PDF ファイルを生成する ( FPDFを使用) メール システムを作成し、その後、PHP の Swiftmailer を使用して PDF ファイルを添付ファイルとして送信しました。このメールは 130 人に送信されました (「1 回限りの」請求書として)。しかし、それはほとんどすべての人のスパム フィルターに届きました。SwiftMailers のヘッダー設定を調整しようとしましたが、うまくいきませんでした。以前に送信したことのないメールでも (徹底的にテスト済み)。これは私の初期設定でした:

function sendMailEt($toEmail, $toName, $invoiceNumber){

require_once('includes/lib/swift_required.php');

$transport = Swift_SmtpTransport::newInstance('mailout.one.com', 25)
  ->setUsername('EMAIL-ACCOUNT1@THE-DOMAIN.DK')
  ->setPassword('THE-PASSWORD')
  ;    

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('FROM COMPANY')
      ->setSubject('Thanks for signing up - COMPANY')
  ->setFrom(array('EMAIL-ACCOUNT1@THE-DOMAIN.DK' => 'Company name'))
  ->setTo(array($toEmail => $toName))
      ->setBody('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)')
      ->addPart('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)', 'text/html')

   ->attach(Swift_Attachment::fromPath('/URL-TO-THE-PDF-FILE.pdf'))
  ;

$result = $mailer->send($message);
}

また、PHP のネイティブmail()関数を使用してメールを送信してから、請求書 ( ) にリンクするだけで送信しようとしましたが、http://www.company-domain-name.dk/invoice/base64_encoded-name.pdf同じ結果 (スパム) でした。

ヘッダー全体を自分で書いてみました。ヘッダーに何を含める必要があるかについて多数のフォーラムを読みましたが、それらはすべて異なることを書いています。それで、いくつかの異なることを試しました(以前に送信したメールと送信していないメールの両方)...同じ結果(スパム)。

次に、ヘッダーにMailChimpsとまったく同じようにヘッダーを書き込んでみました。それが私をこれに導きました:

 $headers = "Reply-To: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n"; 
 $headers .= "Return-Path: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n"; 
 $headers .= "From: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n"; 
 $headers .= "MIME-Version: 1.0\r\n";
 $headers .= "Sender: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n";
 $headers .= "Content-type: text/plain; charset=\"utf-8\"; \r\n";
 $headers .= "X-Mailer: PHP". phpversion() ."\r\n";

そして、次のようにメールを送信します。

mail($toName . '<'.$toEmail.'>', utf8_decode('Faktura på depositumet'), utf8_decode($someMessage), $headers);

... 同じ結果 (スパム)。

Web スペースは One.com にあるため、PHPmailer を使用できません(インストールする必要があり、one.com のサーバーでは実行できないため)。また、One.com で SPF を定義できません。

私が望むのは、スパムにならない電子メールを送信できることだけです。

ここに私の質問があります:

  1. ヘッダーがオフになっているためですか、それとも「より深い」ものですか?

  2. Gmail スパム フィルタは単一のメール アカウント ( など this@example.com) を禁止しますか、それともドメイン全体 ( など @example.com) を禁止しますか?

  3. ブラックリストに登録された電子メールをホワイトリストに登録することはできますか?

*追加1*

わかりました...私は今、いくつかのことを試しました:

  • 推奨されているように、LoneWolfPR の returnpath を追加しようとしましたが、役に立ちませんでした。
  • One.com (ホスティング会社) に問い合わせたところ、SPF レコードまたは DKIM レコードを設定できないことを確認しました。まだ違います。
  • フォーム付きの Web サイトへのリンクを含む「購読解除」リンクを設定することを検討しましたが、そのアプローチは信じられませんでした。つまり、請求書は常に電子メールで送信されます。そして、なぜ請求書の登録を解除できる必要があるのでしょうか?! それは私の頭の中であまり意味がなかったので、約20分間だけ試しました(明らかに、結果はありませんでした)。

これが私の現在のメール ヘッダーです (Gmail から [オリジナルを表示] をクリックして取得):

Delivered-To: NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com
Received: by 10.76.75.104 with SMTP id b8csp48728oaw;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
X-Received: by 10.152.116.45 with SMTP id jt13mr7897860lab.0.1363480376067;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
Return-Path: <XXX111@DOMAIN-NAME.dk>
Received: from mail-out2.b-one.net (mail-out2.one.com. [91.198.169.19])
        by mx.google.com with ESMTP id p10si4637427lbb.120.2013.03.16.17.32.55;
        Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Received-SPF: neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111@DOMAIN-NAME.dk) client-ip=91.198.169.19;
Authentication-Results: mx.google.com;
       spf=neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111@DOMAIN-NAME.dk) smtp.mail=XXX111@DOMAIN-NAME.dk
Date: Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING@mx.google.com>
Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
    by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
    for <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)
Received: from 85.218.159.219 by www.DOMAIN-NAME.dk via URL_TO_THE_SCRIPT.php with HTTP; Sun, 17 Mar 2013 00:32:53 +0000
To: RECIEVERS_NAME <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>
Subject: EMAIL-SUBJECT
X-PHP-Originating-Script: 87486:NAME-OF-THE-SCRIPT-THE-E-MAIL-WAS-SENT-FROM.php
Reply-To: COMPANY NAME <XXX111@DOMAIN-NAME.dk>
From: Besked fra COMPANY NAME <XXX111@DOMAIN-NAME.dk>
MIME-Version: 1.0
Sender: Besked fra COMPANY NAME <XXX111@DOMAIN-NAME.dk>
Content-type: text/plain; charset="utf-8"; 
X-Mailer: PHP5.3.21
4

5 に答える 5

15

1) 通常、電子メール アドレスは簡単にブラックリストに登録されません。実際にそのアドレスをブラックリストに登録するには、スパム送信者としてタグ付けするのに時間がかかります。

2) はい。スパマーは通常、f4j3ifl@something.com のようなランダムな電子メール アドレスを生成するため、ドメイン名全体がブラックリストに登録される可能性があります。

3) スパムボックスに何回行っても関係ありません。基本的に、最近のスパムフィルターは強力です。スパム送信者は日々回避する方法を改善しようとしているため、フィルターは毎日より厳しくなっています。初めてスパム フォルダに入った場合、ユーザーが実際にスパム ボックスに入れなかった場合は、ユーザーがマークを外すか、問題を解決しない限り、引き続き移動します。

スパムボックスを回避するには?

基本的に、ほとんどのセットアップを行う場所があるため、いくつかの署名と DNS レコードへの多数のアクセスが必要です。

  • 逆引き DNS ルックアップ: 専用サーバーや一部の VPS でも、逆引き DNS レコードを設定できます。場合によっては、チケットを開くだけで IT が設定してくれます。それができない場合は、ホスティングを変更するか、スパマー xD としてタグ付けされたままにしてください。これは、メールが gmail.com から送信されるようにヘッダーに設定できるため、ヘッダーの偽造を防ぐためですが、これはメール サーバーがチェックする方法ではありません。

  • SPFも必須です。SPFを設定できない場合は、それ以上試してはいけません。ホスティングの変更を検討してください。ここxDで読むのをほとんどやめることができます.

  • DKIM/ドメイン キー: できれば DKIM は暗号化された署名です。DNS に公開キーを設定し、電子メール サーバーに秘密キーを保存します。サーバーが電子メールを受信すると、ヘッダーに秘密キーが添付されます ( DKIMを管理するメールサーバーソフトウェアが必要です。たとえば、Windowsの場合はhmailserverで機能し、メールサービス(gmailなど)はDNSレコードをチェックして、公開鍵が一致するかどうかを確認します。これもほぼ必須です


これら 3 つは基本でした。DMARC と ADSP を設定すると、SpamAssassins のスコアが向上します。Google のスパム キーワード リストの検索スコアをさらに上げて、それらを回避するために、「Dear xxx」で始まるメールなどはスコアに悪影響を及ぼします。明確なリンクを提供すると)も少し役立ちます。

また:

  • (任意の)背景の上にずさんな html や白いテキストを使用しないでください。スパマーの中には、隠しテキストに合わせて使用​​するものもあります。これらのフィルタは、あなたが思っているよりも賢いものです。

  • 具体的な推奨事項をお読みください。ほとんどのメール サービスの Web サイトには、メールを送信して迷惑メールに分類されないようにするためのヒントが記載された FAQ などが掲載されています。それらのいくつかは、ホワイトリストへの登録を申請することさえできます (少なくとも数年前、gmail のような一部のサービスでは、もうそれを行っていません)。

  • まとめて送る場合は時間に注意!毎秒 X 通のメールがどこかに送信されている場合、ブラックリストに登録される可能性が高く、スクリプトなどを設定して 1 秒程度の遅延が発生する可能性があります。遅延は、宛先がブラックリストに登録されるかどうかによって異なります。


これらのヒントがお役に立てば幸いです。最近、いくつかのスパムフィルターに対処する必要があり、それはお尻の痛みです。そのため、すべての情報を知っています。それが私の研究のすべてです xD電子メールはまだスパムボックスに入っています (割合は少ないですが、それでも私は痛いです) 唯一の信頼できる方法は、(署名とヘッダーを正しく保持しながら) ユーザーに連絡先リストに追加してもらうことです。 .

于 2013-03-11T15:05:59.343 に答える
3

心に留めておくべきことの 1 つは、Gmail と Yahoo! Return-Path ヘッダーが送信元と一致しなかったため、php からのメール。多くのサーバーでは、ヘッダーに明示的に Return-Path を設定すると、PHP メールはそれを無視し、リターン パスをマシン名に設定します。「-f」フラグを使用して、メール機能の「追加パラメーター」セクションで強制する必要があります。Swift Mailer を使ったことがないので、PHP のネイティブの mail() 関数に相当するものはわかりませんが、mail() を使用すると次のようになります。

mail($to,$subject,$message,$headers,'-f returnpath@example.com')

これに相当するものを迅速なメーラーで見つけることができれば、問題が解決する可能性があります。

編集:

実際には Return-Path をまったく設定していないようです。GMail は、それが除外されることを本当に好まないことを私は知っています。Swift_Mailer メッセージに明示的に設定してみてください (From と一致することを確認してください)。

$message->setReturnPath('from@example.com');
于 2013-03-14T18:54:28.060 に答える
2

解決策: Mailgun (テストされていません) またはSendgrid (テスト済みで驚異的に動作します!)を使用してください。この 2 つには価格の違いがありますが、要するに、あなたが小さい場合は Mailgun が適しています。あなたが大きいなら、Sendgridは良いです。

または、 MailChimps APIなどを使用してメールを送信します。共有ホストでは修正できません (ほとんどの場合)。理由は以下。


説明:後で、共有ホストの仕組みについて詳しく学びました。いくつかの異なるサイトが同じサーバー上にあるとします ( domain-1.org、 、domain-2.orgなどdomain-3.org)。つまりdomain-3.org、迷惑メールを大量に送信すると、Gmail (およびその他のスパム フィルター) がその IP アドレスをスパムとしてマークします。そのため、何かdomain-2.orgを送信すると、それは (おそらく) 何らかの IP アドレスから送信されるため、最終的にスパムになります。共有ホストは、実際には何もできません (この問題を抱えている人はほとんどいないので、気にしません)。そしてそれがとても安い理由です。

Sendgrid と Mailguns の IP アドレスは、すべてのスパム フィルターによって「問題なし」とマークされます。これは、料金を支払っているサービスです。彼らは、送信した電子メールの数が「スパム」としてマークされていることを監視することで、その状態を維持しています。5% から 10% のようなもの、または非常に低いものである場合、Sendgrid/Mailgun は、修正するまでアカウントをブロックします (長いプロセスを経て、カスタマー サービスに連絡し、1,000 回のヘイル メアリーなどを行う必要があります)。奇妙なものの)。

独自のサーバー (はるかに高価) を取得し、独自のメール サーバーをセットアップする場合は、スパムとしてマークされないように十分に注意する必要があると聞きました。最近の迷惑メールフィルターは本当に厳しいです...

于 2013-04-29T09:30:08.000 に答える
0

FROM として使用している電子メール アドレスが実際の電子メール アドレスであることを確認してください。ホスト (one.com for you) からアカウント管理に移動し、メールの送信元のアカウントを追加することで、同じ問題を解決しました。「メーラー」というアカウントを追加し、パネルから「申し訳ありません。このメールアドレスはサーバー機能用に予約されています」という自動応答を設定できました。

次に使用する from ヘッダーで (mailer@yourdomain.com)

その実際の電子メールアドレスと自動返信機能があればうまくいきました。gmail は、これまでに使用されたことのない電子メール アドレスがスパムであることを認識できるほど賢いと思います。また、電子メール アドレスは、スクリプトが存在するドメインから取得する必要があります。これにより、それが FROM であると言うときに嘘をつかないようになります。

共有ホスト (justhost.com) からメールを送信するときに使用するコードは次のとおりです。スパムにはなりません (これは Web フォームからの投稿データを使用しています)。

<?php



// Contact subject

$subject = $_POST["subject"];



// Details

$message=$_POST["detail"];



// Email of sender

$mail_from=$_POST["customer_mail"]; 

//Name of sender

$name=$_POST["name"];
putenv("TZ=America/Phoenix");
$now = date("F j, Y, g:i a T");

$header="Reply-To: $name <$mail_from>";

$header .= "From: MyDomainName.com <mailer@mydomainname.com>";
$header .= "\r\n";
$header .= "Reply-To: $name <$mail_from>"; 
$introMSG= "Message From:".$name." <".$mail_from.">"."\r\n"
."Sent On:".$now."\r\n"."From a web form on MyDomaiNname.com"."\r\n"."-----------
-----------------------"."\r\n"."\r\n";


$to ='me@mydomainname.com'; // Domain Owners Email Address

$send_contact=mail($to,$subject,$introMSG.$message,$header);

$send_copy=mail($mail_from,"Copy Of:".$subject,$introMSG.$message,$header);

// Check if message sent


if($send_contact){

echo "<strong>Thanks! Your message has been sent to me.</strong>";

}

else {

echo "<strong>There was an error sending your message </strong>"; 

}



if($send_copy){
echo "<strong><br>A copy of this message was sent to your email.<br>If you do not
receive a copy please check your spam folder</strong>";

}

else{
echo "<strong> There was an error sending a copy of this message to your email
</strong>"; 

}



$send_reminder=mail("5555555555@txt.att.net","","You Have a new contact message from
".$name.", remember to check your spam folder.",$header);

if($send_reminder){

echo ".";

}

else {

echo "<br><strong>TXT Error</strong>";

}

?>
于 2013-03-16T02:53:19.927 に答える