0

ZF1 と ZF2 で次の関数を使用するとメール チンプが動作しないのはなぜですか?

class TestController extends Zend_Controller_Action {

  public function indexAction() {
   echo  $this->Mailb(
                  "from@gmail.com", 
                  "to@gmail.com", 
                  "Mail sucks",
                  "PING PINGO",
                  'me@gmail.com,me1@gmail.com,me2@gmail.com', 
                  );
  }

  public static function Mailb($from, $to, $subject, $htmlBody, 
          $bcc = '') {
    $uri = 'https://mandrillapp.com/api/1.0/messages/send.json';

    $postString = '{
    "key": "erewrrwerewrewrewrewrewr",
    "message": {
        "html": "' .$htmlBody. '",
        "text":  "' .$htmlBody. '",
        "subject": "' .$subject.'",
        "from_email": "' .$from. '",
        "from_name": "BLA 1",
        "to": [
            {
                "email": "' . $to . '",
                "name": "BLA 2"
            }
        ],
        "headers": {

        },
        "track_opens": true,
        "track_clicks": true,
        "auto_text": true,
        "url_strip_qs": true,
        "preserve_recipients": true,

        "merge": true,
        "global_merge_vars": [

        ],
        "merge_vars": [

        ],
        "tags": [

        ],
        "google_analytics_domains": [

        ],
        "google_analytics_campaign": "...",
        "metadata": [

        ],
        "recipient_metadata": [

        ],
        "attachments": [

        ]
    },
    "async": false
    }';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $uri);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);

    $result = curl_exec($ch);    
  }

}

編集:主なエラー

今:[{"email":"to@gmail.com","status":"sent","_id":"1cbe2f9a2d","reject_reason":nul‌​l}]

4

1 に答える 1

1

推測です。

ネイキッド パラメータ ( 、 など) を JSON テンプレートにダンプしているだけ$htmlBodyです$subject。おそらく、有効な JSON ペイロードを作成するためにエンコードする必要があるスラッシュまたは引用符がいくつかあります。MailChimp が無効なペイロードを検出し、適切に報告していない可能性があります。

おそらく PHP 配列を作成し、それを使用json_encode($arr)してペイロードを作成します。このように、スラッシュと引用符のすべてのエンコーディングは、それらの変数内の他の狂気を単独で処理しjson_encodeます。

具体的には:

$postData = array(
    'key' => 'mykey',
    'message' => array(
        'html' => $htmlBody,
        'text' => $htmlBody,
        'subject' => $htmlBody,
        'subject' => $subject,
        'from_email' => $from,
        // etc
    ),
);

$postString = json_encode($postData);

// Then post via `curl_xxx()` as before

二次的な考え、おそらく実質よりもスタイル: メソッドMailb()は静的に宣言されていますが、を使用して呼び出され$this->Mailb()ます。私はおそらくそれを使用して呼び出すでしょうself::Mailb()

于 2013-07-20T20:30:46.053 に答える