wp почта не отправляет вложение
Моя почтовая функция выглядит следующим образом
add_action('wp_ajax_order_processing', 'order_processing');
function order_processing(){
include 'mail-translations.php';
require_once( ABSPATH . 'wp-admin/includes/file.php' );
global $wp_filesystem;
$upload_dir = wp_upload_dir();
$dir = trailingslashit( $upload_dir['basedir'] ) . 'order-confirm/';
WP_Filesystem();
$wp_filesystem->mkdir( $dir );
$build_id=md5(uniqid(cvf_td_generate_random_code(), true));
$message = "<p>Hello</p>";
$mpdf = new mPDF('utf-8', 'A4-P');
$mpdf->debug = true;
$mpdf->dpi = 150;
$mpdf->img_dpi = 150;
$mpdf->setAutoTopMargin = 'stretch';
$mpdf->setAutoBottomMargin = 'stretch';
$src = get_template_directory_uri() . '/images/rsz_bomann-logo-black.png';
$mpdf->SetWatermarkImage($src);
$mpdf->showWatermarkImage=true;
$mpdf->SetHTMLHeader('');
// PDF footer content
$mpdf->SetHTMLFooter('');
$mpdf->SetFont('helvetica');
$mpdf->WriteHTML($message); // Writing html to pdf
// FOR EMAIL
$content = $mpdf->Output( $dir . "wardrobe-".$build_id.".pdf", 'F');
$content = chunk_split(base64_encode($content));
$attachment = $upload_dir['baseurl'] . "/order-confirm/wardrobe-
".$build_id.".pdf";
// Set Mail Headers
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=" . get_bloginfo('charset') .
"" . "\r\n";
$subject = __('Order Confirmation for Order No. ', 'skapnet');
$order_mail = wp_mail("[email protected]", $subject, 'message' ,
$headers, array($attachment));
echo $order_mail;
}
Вложение возвращает абсолютный путь с сервера. Потому что, когда я вставил его в URL-адрес, я получил pdf-файл. Почта также отправляется, но без вложения. Пожалуйста, помогите.
1 answers
Вы сказали в своей операции, что был возвращен абсолютный путь, но вы используете значение 'baseurl', которое дает вам URL-адрес файла, к которому вы можете перейти. Это URL-адрес, который не совпадает с путем к файлу в файловой системе.
Эта строка - ваша проблема:
$attachment = $upload_dir['baseurl'] . "/order-confirm/wardrobe-
".$build_id.".pdf";
Это дает вам URL-адрес, подобный этому:
http://yoursite.com/directory/order-confirm/wardrobe-something.pdf
Вы не можете прикрепить файл к электронному письму с URL-адреса. Вам нужен путь к файлу на сервере, чтобы вы могли его прикрепить. Используйте basedir
значение для построения пути к файлу вместо этого.
$attachment = $upload_dir['basedir'] . "/order-confirm/wardrobe-
".$build_id.".pdf";
Результат basedir
даст вам что-то вроде следующего:
/yourserver/somepath/directory/order-confirm/wardrobe-something.pdf
Указав путь к файлу, вы можете прикрепить его к своей электронной почте.
Вот ваша функция, измененная для использования basedir
вместо baseurl
(отмечено комментарием, в котором я ее изменил):
add_action('wp_ajax_order_processing', 'order_processing');
function order_processing(){
include 'mail-translations.php';
require_once( ABSPATH . 'wp-admin/includes/file.php' );
global $wp_filesystem;
$upload_dir = wp_upload_dir();
$dir = trailingslashit( $upload_dir['basedir'] ) . 'order-confirm/';
WP_Filesystem();
$wp_filesystem->mkdir( $dir );
$build_id=md5(uniqid(cvf_td_generate_random_code(), true));
$message = "<p>Hello</p>";
$mpdf = new mPDF('utf-8', 'A4-P');
$mpdf->debug = true;
$mpdf->dpi = 150;
$mpdf->img_dpi = 150;
$mpdf->setAutoTopMargin = 'stretch';
$mpdf->setAutoBottomMargin = 'stretch';
$src = get_template_directory_uri() . '/images/rsz_bomann-logo-black.png';
$mpdf->SetWatermarkImage($src);
$mpdf->showWatermarkImage=true;
$mpdf->SetHTMLHeader('');
// PDF footer content
$mpdf->SetHTMLFooter('');
$mpdf->SetFont('helvetica');
$mpdf->WriteHTML($message); // Writing html to pdf
// FOR EMAIL
$content = $mpdf->Output( $dir . "wardrobe-".$build_id.".pdf", 'F');
$content = chunk_split(base64_encode($content));
// Use 'basedir' instead of 'baseurl':
$attachment = $upload_dir['basedir'] . "/order-confirm/wardrobe-
".$build_id.".pdf";
// Set Mail Headers
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=" . get_bloginfo('charset') .
"" . "\r\n";
$subject = __('Order Confirmation for Order No. ', 'skapnet');
$order_mail = wp_mail("[email protected]", $subject, 'message' ,
$headers, array($attachment));
echo $order_mail;
}