Google App Engine - Почта () вложение

Я могу успешно отправлять электронные письма с App Engine Mail API, но я не могу найти проблему, почему вложения не прикрепляются в электронной почте. Мой код выглядит так:

// Pull in the raw file data of the image file to attach it to the message.
$image_data = fopen('gs://pro-sitemaps-api/file.csv');

try {
    $message = new Message();
    $message->setSender('myemail@****.com');
    $message->addTo('myemail@****.com');
    $message->setSubject('Subject Google App Engine Test');
    $message->setTextBody('Test body');
    $message->addAttachment('file.csv', $image_data);
    $message->send();
    echo 'Mail Sent';
} catch (InvalidArgumentException $e) {
    echo 'There was an error'.$e;
}

Мой файл находится в Google Storage (ведро). Тип файла для хранения файла .csv

Может кто-нибудь сказать мне, что я делаю не так?

Редактировать:
Добавление "mode":"r" дает мне эту ошибку:

$image_data = fopen('gs://pro-sitemaps-api/file.csv', 'r');

Выход:

error: {
code: "500",
message: "An error occurred parsing (locally or remotely) the arguments to mail.Send().",
status: "UNKNOWN",
details: [ ]
}
}





Изменить: это работает, но это только отправляет верхнюю строку (заголовок). не все строки. Попытался добавить это внутри массива и отправить массив в виде вложения, но затем я получаю ту же ошибку.

$fpmail = fopen('gs://pro-sitemaps-api/file.csv', 'r');
    //$attach = fread($fpmail);
    $attach = fgets($fpmail);
    print_r($attach);

    try {
        $message = new Message();
        $message->setSender('asim@redperformance.no');
        $message->addTo('asim@redperformance.no');
        $message->setSubject('Test');
        $message->setTextBody('Test nyeste');
        $message->addAttachment('file.csv', $attach);
        $message->send();
        echo 'Mail Sent';
    } catch (InvalidArgumentException $e) {
        echo $e;
    }

    fclose($fpmail);

1 ответ

Я никогда не пишу код на PHP, но похоже, что вы на самом деле не читаете содержимое файла.

В большинстве языков программирования такой вызов fopen это только первый шаг к получению содержимого файла, но на самом деле это не получение содержимого. Вам, вероятно, понадобится что-то вроде этого:

$f = fopen('gs://pro-sitemaps-api/file.csv', 'r');
$image_data = $f.read();

но вам нужно выяснить, как читать данные из файла в PHP.