0

次のコードがあります。

static function getContext($data) {
    // use key 'http' even if you send the request to https://...
    $options = array (
        'http' => array (
            'header' => "Content-type: application/x-www-form-urlencoded\r\n",
            'method' => 'POST',
            'content' => http_build_query ( $data ) 
        ) 
    );

    return stream_context_create ( $options );
}

static function addEmailsToRecipientList($name, $emails) {

    $url = 'https://sendgrid.com/api/newsletter/lists/email/add.json';

    $temp = array();
    foreach($emails as $email){
        $temp[] = array('email' => $email, 'name' => 'unknown');
    }

    $data = array (
            'list' => $name,
            'data' => json_encode($temp),
            'api_user' => $api_user_name,
            'api_key' => $api_password
    );

    $context = SendGridAPI::getContext ( $data );
    return file_get_contents ( $url, false, $context );
}

addEmailsToRecipientList に、既存のリストの名前と追加したい電子メール アドレスの配列を渡すと、エラー 500 (内部サーバー エラー) が発生します。

単一の電子メール ($temp = array('email' => $email, 'name' => 'unknown')) を追加すると問題なく動作します。私は何を間違っていますか?

どうもありがとう!

4

2 に答える 2

0

いくつかのタッチを含むスクリプトは非常にうまく機能します。メールの urlencode、json_decode、およびシミュレートされた名前を追加します。

    $url = 'https://sendgrid.com/api/newsletter/lists/email/add.json?api_user='.$username.'&api_key='.$password; 

    $str= '&list=' . $listname;  
    foreach ($data as $email) {
        $attributes = explode("@", $email);
        $str.= '&data[]=';
        $str.= urlencode('{"email":"'. $email . '","name":"'. ucfirst($attributes[0]) .'"}');
    }

    $results = file_get_contents($url . $str);
    $results = json_decode($results, TRUE);
    return (isset($results['inserted'])) ? $results['inserted'] : 0;
于 2014-08-03T00:39:30.593 に答える