我正在 Laravel 中通过 CURL 发送 PDF 文件:
<?php
namespace App\Http\Controllers\EmailSender;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class EmailAttachments extends Mailable{
use Queueable, SerializesModels;
function __construct($from, $to, $subject, $description, $attachments, $file_names = null){
if(str_contains($to, 'email.com')){
return;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, 'https://api.eu.mailgun.net/v3/'.config('app.mailgun_domain').'/messages');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: multipart/form-data'));
$post = array(
'from' => $from,
'to' => $to,
'subject' => $subject,
'text' => 'Your mail do not support HTML',
'html' => $description
);
// Attach all my files
// Note that this files are with the full path, since the public_path to the file
$i = 0;
foreach ($attachments as $attachment) {
echo $attachment;
$post['attachment[' . $i . ']'] = curl_file_create($attachment, null, $file_names == null ? 'Report_' . date('W') .'.pdf' : $file_names[$i]);
$i++;
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_USERPWD, 'api' . ':' . config('app.mailgun_secret'));
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
}
}
?>
我收到这条消息:
libpng warning: iCCP: known incorrect sRGB profile
Error:operation aborted by callback
我在其他项目及其工作中也这样做。
我检查了文件,路径都没有问题。我仔细检查了。路径没问题,扩展名为“.pdf”。
示例:
/home/root/backend.app.com/storage/app\works\obras\Report_0.pdf
文件已创建并可以附加。 我搜索了解决方案,但所有主题都在谈论 PNG 和其他格式。而且我没有找到解决方案。
我尝试更新 Curl 但仍然没有成功。
也许答案很愚蠢,问题也是如此。 我会让我的问题得到解决。 在定义附件的路径时,我使用了 // 反斜杠。 例如:
"path//" . $variable . "//other_folder//a.pdf"
但我应该这样做:
"path/" . $variable . "other_folder/a.pdf"
他似乎不喜欢双反斜杠。有趣的是,它在本地工作。但在服务器上它不起作用