簡體   English   中英

curlopt_postfields $ params'to'作為數組?

[英]curlopt_postfields $params 'to' as an array?

與此處的方法完全相同: 具有動態PHP參數的SendGrid,但我要嘗試設置的是多個“收件人”和“抄送”電子郵件地址。 可以將這些設置為當前實現的數組嗎?

$params = array(
    'api_user'  => $user,
    'api_key'   => $pass,
    'to' => array('user1@example.com','user2@example.com'),
    'cc' => array('user3@example.com','user4@example.com'),
    'subject'   => 'test email',
    'html'      => '<p>This is a test email</p>',
    'text'      => 'done',
    'from'      => 'admin@example.com'
  );

curl_setopt ($session, CURLOPT_POSTFIELDS, $params;

當我僅在沒有數組的'to'和'cc'中設置單個電子郵件時,它運行良好並發出了電子郵件,但是當我添加為數組時它將無法運行。

我也試過了,但是沒有運行。

curl_setopt ($session, CURLOPT_POSTFIELDS, http_build_query($params);

不幸的是,文檔中沒有任何內容說明如何在to / cc字段中傳遞多個地址-https: //sendgrid.com/docs/Code_Examples/php.html

PHP的cURL庫只知道如何處理一維數組,因此您需要使用http_build_query()手動構建數據字符串,然后將其設置為CURLOPT_POSTFIELDS

如果您需要更好地控制數據字符串的格式[例如:復雜帖子中的文件上傳],則可以使用以下方法之一。

$params = array(
    'api_user'  => 'foo',
    'api_key'   => 'bar',
    'to' => array('user1@example.com','user2@example.com'),
    'cc' => array('user3@example.com','user4@example.com'),
    'subject'   => 'test email',
    'html'      => '<p>This is a test email</p>',
    'text'      => 'done',
    'from'      => 'admin@example.com',
    'file'      => '@foobar.txt'
);

// returns a query string
function encode1($params) {
        $data_arr = array();
        foreach( $params as $key => $value ){
                if( ! is_array($value) ) {
                        if( strpos($value, '@') === 0 ) { $encvalue = $value; }
                        else { $encvalue = urlencode($value); }
                        $data_arr[] = sprintf('%s=%s', urlencode($key), $encvalue);
                } else {
                        foreach( $value as $item ) {
                                if( strpos($item, '@') === 0 ) { $encvalue = $item; }
                                else { $encvalue = urlencode($item); }
                                $data_arr[] = sprintf('%s=%s', urlencode($key.'[]'), $encvalue);
                        }
                }
        }
        return implode('&', $data_arr);
}
var_dump(encode1($params));
/* result:
string(254) "api_user=foo&api_key=bar&to%5B%5D=user1%40example.com&to%5B%5D=user2%40example.com&cc%5B%5D=user3%40example.com&cc%5B%5D=user4%40example.com&subject=test+email&html=%3Cp%3EThis+is+a+test+email%3C%2Fp%3E&text=done&from=admin%40example.com&file=@foobar.txt"
*/

// returns an array
function encode2($params) {
        $out = array();
        foreach( $params as $key => $value ) {
                if( ! is_array($value) ) {
                        $out[$key] = $value;
                } else {
                        for( $i=0; $i<count($value); $i++ ) {
                                $index = sprintf('%s[%d]', $key, $i);
                                $out[$index] = $value[$i];
                        }
                }
        }
        return $out;
}
var_dump(encode2($params));
/* result:
array(11) {
  ["api_user"]=>string(3) "foo"
  ["api_key"]=> string(3) "bar"
  ["to[0]"]=>   string(17) "user1@example.com"
  ["to[1]"]=>   string(17) "user2@example.com"
  ["cc[0]"]=>   string(17) "user3@example.com"
  ["cc[1]"]=>   string(17) "user4@example.com"
  ["subject"]=> string(10) "test email"
  ["html"]=>    string(27) "<p>This is a test email</p>"
  ["text"]=>    string(4) "done"
  ["from"]=>    string(17) "admin@example.com"
  ["file"]=>    string(11) "@foobar.txt"
}
*/

您必須將電子郵件作為數組值傳遞。 嘗試以下代碼段:

$params = array(
    'api_user'  => $user,
    'api_key'   => $pass,
    'to[0]' => 'user1@example.com',
    'to[1]' => 'user2@example.com',
    'cc[0]' => 'user3@example.com',
    'cc[1]' => 'user4@example.com',
    'subject'   => 'test email',
    'html'      => '<p>This is a test email</p>',
    'text'      => 'done',
    'from'      => 'admin@example.com'
);

curl_setopt ($session, CURLOPT_POSTFIELDS, $params;

現在應該可以工作了! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM