Артем С.
32 сообщения
#15 лет назад
Всем привет!

Есть проблема в Shop Script. Заказчик пожелал сделать уведомление о заказе в форме счета с печатью и росписью (картинка jpg). В стандартном варианте в файле order_place.php используется функция mail(). Письмо без вложения. Чтобы прикрепить печать и роспись нужно отправлять письмо с вложением. Нашел в сети функцию XMail(). После оформления заказа и нажатия на кнопку выводятся ошибки:
Warning: fopen(/includes/stamp.jpg) : failed to open stream: No such file or directory in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 12

Warning: filesize() : stat failed for /includes/stamp.jpg in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 30

Warning: fread(): supplied argument is not a valid stream resource in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 30

Warning: Cannot modify header information - headers already sent by (output started at /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php:12) in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 135

Уведомление о заказе приходит, но изображение в письме не отображается и не открывается. Кроме того, хостер помечает письмо как спам :-(

Может кто-то уже использовал функцию XMail()? Или как по-другому можно приатачить изображение.
Файл order_place.php


<?php
/*****************************************************************************
* *
* Shop-Script FREE *
* Copyright (c) 2005 WebAsyst LLC. All rights reserved. *
* *
****************************************************************************/


function XMail( $from, $to, $subj, $text, $filename)
{
$f = fopen($filename,"rb");
$un = strtoupper(uniqid(time()));
$head = "From: $from\n";
$head .= "To: $to\n";
$head .= "Subject: $subj\n";
$head .= "Reply-To: $from\n";
$head .= "Mime-Version: 1.0\n";
$head .= "Content-Type:multipart/mixed;";
$head .= "boundary=\"----------".$un."\"\n\n";
$zag = "------------".$un."\nContent-Type:text/html;\n";
$zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag .= "------------".$un."\n";
$zag .= "Content-Type: application/octet-stream;";
$zag .= "name=\"".basename($filename)."\"\n";
$zag .= "Content-Transfer-Encoding:base64\n";
$zag .= "Content-Disposition:attachment;";
$zag .= "filename=\"".basename($filename)."\"\n\n";
$zag .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";

if (!@mail("$to", "$subj", $zag, $head))
return 0;
else
return 1;
}



//place order: save to the database, send notifications, gateway processing

if (isset($_GET)) //show 'order successful' page
{
$smarty->assign("order_id", $_SESSION);
$smarty->assign("order_amount", $_SESSION);

$smarty->assign("main_content_template", "order_place.tpl.html");
$smarty->assign("order_is_placed", $_GET);
}
else if (isset($_POST)) //place order
{

//shopping cart items count
$c = 0;
if (isset($_SESSION))
for ($j=0; $j<count($_SESSION); $j++)
if ($_SESSION) $c += $_SESSION;

//not empty?
if (isset($_SESSION) && $c)
{
//insert order into database


//validation
if (preg_match('/^+$/',$_POST)) $post_phone = $_POST; else $post_phone =

mysql_real_escape_string($_POST);
if (preg_match('/+@+.+/',$_POST)) $post_email =

$_POST; else $post_email = mysql_real_escape_string($_POST);

db_query("insert into ".ORDERS_TABLE." (order_time, cust_firstname, cust_lastname, cust_email,

cust_country, cust_zip, cust_state, cust_city, cust_address, cust_phone) values

('".get_current_time()."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".$post_email."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".mysql_real_

escape_string($_POST)."','".$post_phone."');") or die (db_error());
$oid = db_insert_id(); //order ID


//now move shopping cart content to the database

$k = 0; //total cart value
$products = array();
$adm = ""; //order notification for administrator

for ($i=0; $i<count($_SESSION); $i++)
if ($_SESSION)
{
$q = db_query("SELECT name, Price, product_code FROM ".PRODUCTS_TABLE." WHERE

productID='".$_SESSION."'") or die (db_error());
if ($r = db_fetch_row($q))
{
//product info
$tmp = array(
$_SESSION,
$r,
$_SESSION,
($_SESSION*$r)." ".$currency_iso_3,
$r
);

//store ordered products info into database
$articul = trim($tmp) ? "."] " : "";
db_query("insert into ".ORDERED_CARTS_TABLE." (orderID, productID, name,

Price, Quantity) values ('$oid', '".$tmp."', '".$articul.$tmp."', '".$r."', '".$tmp."');");


$products = $tmp;

//update order amount
$k += $_SESSION*$r;

//order notification for administrator - update
$adm .= $articul.$tmp." (x".$tmp."): ".$tmp."\n";

}
db_query("UPDATE ".PRODUCTS_TABLE." SET in_stock=in_stock-".$tmp." WHERE productID=".$tmp) or die (db_error());
}

//assign order content to smarty
$smarty_mail->assign("order_content", $products);
$smarty_mail->assign("order_total", $k." ".$currency_iso_3);
$smarty_mail->assign("order_id", $oid);
$smarty_mail->assign("order_custname", $_POST." ".$_POST);
$smarty_mail->assign("order_shipping_address", $_POST."\n".$_POST."

".$_POST." ".$_POST."\n".$_POST);

$_SESSION = $oid;
$_SESSION = $k;

//send message to customer
XMail("From:

\"".CONF_SHOP_NAME."\"<".CONF_GENERAL_EMAIL.">\n".stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path:

<".CONF_GENERAL_EMAIL.">", $_POST, EMAIL_CUSTOMER_ORDER_NOTIFICATION_SUBJECT,

$smarty_mail->fetch("order_notification.tpl.html"), "/includes/stamp.jpg");

//notification for administrator
$od = STRING_ORDER_ID.": $oid\n\n";
$adm .= "\n".CUSTOMER_FIRST_NAME." ".$_POST."\n".CUSTOMER_LAST_NAME."

".$_POST."\n".CUSTOMER_COUNTRY.": ".$_POST."\n".CUSTOMER_ADDRESS.": ".$_POST.",

".$_POST.", ".$_POST.", ".$_POST."\n".CUSTOMER_PHONE_NUMBER.":

".$_POST."\n".CUSTOMER_EMAIL.": ".$_POST;
mail(CONF_ORDERS_EMAIL, EMAIL_ADMIN_ORDER_NOTIFICATION_SUBJECT, $od.$adm, "From:

\"".CONF_SHOP_NAME."\"<".CONF_GENERAL_EMAIL.">\n".stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path:

<".CONF_GENERAL_EMAIL.">");

unset($_SESSION);
unset($_SESSION);

//show order placement result
header("Location: index.php?order_placement_result=1");

}
else //empty shopping cart
{
header("Location: index.php?shopping_cart=yes");
}
}

?>

Владимир Ф.
1322 сообщения
#15 лет назад
Fopen(/includes/stamp.jpg)

Файл то там лежит? Права на чтение дали?
Попробуйте в начало адреса файла точку поставить.
Фрилансер У.
248 сообщений
#15 лет назад
Warning: fopen(/includes/stamp.jpg)

"/includes/stamp.jpg"

Этот путь относительно корня, там врядли ваш штамп будет лежать. Укажите путь относительно скрипта через dirname(__FILE__).'/includes/stamp.jpg' например так, если штамп лежит рядом в подпапке includes
Артем С.
32 сообщения
#15 лет назад
Спасибо. Сделал так , как Вы писали. Ошибки изчезли, только уведомление о заказе не приходит вообще :-( Приходит только сообщение админу, что есть новый заказ...
Права 777
Николай Т.
205 сообщений
#15 лет назад
Так спам фильтр теперь его режет :-D
я бы сделал html письмо, а картинки грузил вы с сервера.
Артем С.
32 сообщения
#15 лет назад
Цитата ("e1it3"):
Так спам фильтр теперь его режет :-D
я бы сделал html письмо, а картинки грузил вы с сервера.


Спасибо...попробую и это...
Артем С.
32 сообщения
#15 лет назад
Спасибо. Разобрался. Сделал html-письмо а картинку гружу с сервера, как и подсказали. Спам фильтр все равно резал из-за поля From...Там название магазина было и адрес e-mail не с домена...Название сократил, адрес с домена поставил. Письма приходят!