You said in your OP that the absolute path was returned, but you are using the ‘baseurl’ value which gives you a URL to the file that you can browse to. That’s a URL, which is not the same as the path to the file in the file system.
This line is your issue:
$attachment = $upload_dir['baseurl'] . "/order-confirm/wardrobe-
".$build_id.".pdf";
This gives you a URL like this:
http://yoursite.com/directory/order-confirm/wardrobe-something.pdf
You can’t attach a file to an email from a URL. You need the file path to the file on the server so you can attach it. Use the basedir
value to build the file path instead.
$attachment = $upload_dir['basedir'] . "/order-confirm/wardrobe-
".$build_id.".pdf";
The basedir
result will give you something like the following:
/yourserver/somepath/directory/order-confirm/wardrobe-something.pdf
With the path to the file, you can attach it to your email.
Here’s your function revised to use basedir
instead of baseurl
(noted with a comment where I changed it):
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;
}