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-файл. Почта также отправляется, но без вложения. Пожалуйста, помогите.

Author: Simeon Mark Fernandes, 2018-11-09

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;

}
 0
Author: butlerblog, 2019-12-28 14:44:34