Есть у меня один скриптик для рассылки писем с вложениями. Вложения отправляются отлично, но вот с самим телом письма запара, т.к. текст пись должен содержать и жирный шрифт и наклонный и всякий разный. Была у меня идея в тело письма встраивать уже готовый текст, оформленный тегами хтмл, при этом в заголовке указав content-type: text/html, но нечего из этого не выходит. И письмо приходит вместе с тегами.
Вот полюбуйтесь
$filename="message.txt";-файл-вложение
class mime_mail {
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;
// создаем класс
function mime_mail() {
$this->parts = array();
$this->to = "";
$this->from = "";
$this->subject = "";
$this->body = "";
$this->headers = "";
}
// как раз сама функция добавления файлов в мыло
function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
$this->parts [] = array (
"ctype" => $ctype,
"message" => $message,
"encode" => $encode,
"name" => $name
);
}
// Построение сообщения (multipart)
function build_message($part) {
$message = $part["message"];
$message = chunk_split(base64_encode($message));
$encoding = "base64";
return "Content-Type: ".$part["ctype"].($part["name"]? "; name = "".$part["name"].""" : "")." Content-Transfer-Encoding: $encoding $message ";
}
function build_multipart() {
$boundary = "b".md5(uniqid(time()));
$multipart = "Content-Type: multipart/mixed; boundary = $boundary This is a MIME encoded message. --$boundary";
for($i = sizeof($this->parts)-1; $i>=0; $i--) $multipart .= " ".$this->build_message($this->parts[$i]). "--$boundary";
return $multipart.= "-- ";
}
// Посылка сообщения, последняя вызываемая функция класса
function send() {
$mime = "";
if (!empty($this->from)) $mime .= "From: ".$this->from. " ";
if (!empty($this->headers)) $mime .= $this->headers. " ";
if (!empty($this->body)) $this->add_attachment($this->body, "", "text/plain");
$mime .= "MIME-Version: 1.0 ".$this->build_multipart();
mail($this->to, $this->subject, "", $mime);
}
}
$msg="
Уважаемые Господа!
Предлагаем Вам и специалистам Вашей Компании принять участие в работе: Международной выставке и конференции— POWER INDIA 2006
Время проведения: 12-14 Октября 2006 г. Место проведения: Мумбай (Бомбей), (Индия)
Тема Конференции: «Индия и Азиатские страны - их роль в Энергетическом секторе»
Тематики выставки:
- Электростанции и оборудование для них;
Оборудованная площадь в павильоне (минимум 9 кв.м.) – (включая Service Tax plus education cess {10.2% of net space charges , Security Deposit @ 10% of net space charges): =13000 руб./ м2 (Стандартное оборудование: стеновые панели, фриз с названием компании, ковровое покрытие, 4 спот-лампы, 1 розетка, мусорная корзина, 1 стол, 2 стула, общее кондиционирование, общее освещение)
Необорудованная открытая площадь (минимум 27 кв.м.) - (включая Service Tax plus education cess {10.2% of net space charges}, Security Deposit @ 10% of net space charges): =10900 руб./м2
";
//$msg=strip_tags($msg);
$msg = convert_cyr_string ($msg,w,k);
$file = "../marketing/subscrlist.csv";
$maillist = file($file);
$filename="message.txt";
print "В базе". sizeof($maillist) ." адресов
";
for ($i = 0; $i < sizeof ($maillist); $i++)
{
$attachment = fread(fopen("$filename", "r"), filesize("$filename"));
$mail = new mime_mail();
$mail->from = "agent";//$mailfrom;
$mail->headers ="Content-type: text/html ";
$mail->to = $maillist[$i];
$mail->subject = "hEllO";//$subject;
$mail->body = $msg;
$mail->add_attachment("$attachment", "$filename", "Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAgEASABIAAD/7QT+UGhvdG9zaG
Content-type: text/html");
$mail->send();
}
echo "Готово!";
?>
1. Почитать про формат в котором идут письма.
2. Продумать структуру письма и набор заголовков.
3. Реализовать отправку письма со структурой из п.2 в сценарии.
Если что-то не работает, тут может быть две причины:
1. Неверно продуманы заголовки.
2. Сценарий формирует не так, как задумано.
Локализуй проблему.
Если п.2. — приведи какие заголовки ты хочешь послать и какие посылаются на самом деле. Тогда будем смотреть код.
Если п.1. — приведи только итоговые заголовки. Код смотреть смысла нет.