Xpoint
   [напомнить пароль]

Отправка почты

Метки: [без меток]
2007-06-26 16:10:43 [обр] Валера(6/24)[досье]

Нужно отправить на почту html файл в виде attachment'а, пользуюсь классом PHPMailer. Вот код:

$mail = new PHPMailer();
$mail->From     = "noreply@site.ru";
$mail->CharSet = "windows-1251";
$mail->IsHTML(true);
$mail->Body    = "";
$mail->AddAddress("mail@mail.ru");
if (is_file($filename))
   $mail->AddAttachment($filename, "file.html");
if(!$mail->Send())
{
   echo "Ошибка отправки почты";
   exit;
}
echo "Сообщение отправлено";

Сообщение отправляется с вложением, только в письме кроме attachment'а содержится (в теле) сам html-код attachment'a. Два вопроса:

  1. Можно сделать чтобы тело письма было пустое (оставался только attachment)? Если да, то как.
  2. Почему вместо русских букв приходят каракули (типа аКЮМЙ ГЮЙЮГЮ ОПНДСЙЖХХ), ведь я указываю $mail->CharSet = "windows-1251";
спустя 4 минуты [обр] Валера(6/24)[досье]
Да, $filename содержит html-текст с <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
спустя 31 минуту [обр] Валера(6/24)[досье]
Ладно, с кодировкой я разберусь, а что делать с дублированием attachment'a в теле письма? Как от него избавиться?
спустя 22 часа [обр] dacuan(7/7)[досье]

Валера[досье]
Где-то в коде PHPMailer'а надо заменить строку
Content-Type: multipart/alternative; boundary="..."; charset=...
на
Content-Type: multipart/mixed; boundary="..."; charset=...

Здесь же указывается и необходимая кодировка.
При прикреплении HTML тоже должна быть указана кодировка:
Content-Type: text/html; charset=...

Кака это сделать в случае с PHPMailer'ом, увы, не знаю

спустя 36 минут [обр] Валера(6/24)[досье]

dacuan[досье],

Где-то в коде PHPMailer'а надо заменить строку
Content-Type: multipart/alternative; boundary="..."; charset=...
на
Content-Type: multipart/mixed; boundary="..."; charset=...

Тут есть в нескольких местах, в каком именно?
в функции Send()

...
        // Set whether the message is multipart/alternative
        if(!empty($this->AltBody))
            $this->ContentType = "multipart/alternative";
...

в функции CreateHeader():

...
switch($this->message_type)
        {...
    case "alt":
                $result .= $this->HeaderLine("Content-Type", "multipart/alternative;");
                $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');
                break;
...

и в CreateBody()

...
switch($this->message_type)
        {...
 case "alt_attachments":
                $result .= sprintf("--%s%s", $this->boundary[1], $this->LE);
                $result .= sprintf("Content-Type: %s;%s" .
                                   "\tboundary=\"%s\"%s",
                                   "multipart/alternative", $this->LE,
                                   $this->boundary[2], $this->LE.$this->LE);
...
спустя 16 минут [обр] Валера(6/24)[досье]

Код из моего первого сообщения генерирует такое письмо:

X-Sendmail-Cmdline: sendmail_stub.pl -t -i
To: mail@mail.ru
Subject: 
Date: Tue, 26 Jun 2007 16:04:04 +0400
Return-Path: noreply@site.ru
From: Root User <noreply@site.ru>
Message-ID: <6ad831137932bfc066affe4e443a81e5@test>
X-Priority: 3
X-Mailer: PHPMailer [version 1.73]
MIME-Version: 1.0
Content-Type: multipart/mixed;
   boundary="b1_6ad831137932bfc066affe4e443a81e5"


--b1_6ad831137932bfc066affe4e443a81e5
Content-Type: text/plain; charset = "windows-1251"
Content-Transfer-Encoding: 8bit



--b1_6ad831137932bfc066affe4e443a81e5
Content-Type: application/octet-stream; name="file.html"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="file.html"




--b1_6ad831137932bfc066affe4e443a81e5--

Я так понял что сначала идет тело (пустое), потом attachment, для тела письма кодировка стоит правильная (windows-1251). Content-Type: multipart/mixed; вроде как стоит, но все равно в теле письме приходит attachment и его содержимое попадает в body.

Хм. Похоже, что это стандартное поведение, для примера: я посылаю себе на почтовый ящик письмо с картинкой во вложении и при открытии такого письма кроме ссылки скачать картинку-attachment эта картинка будет загружена и показана в браузере. Поправьте меня если я не прав.

спустя 9 минут [обр] dacuan(7/7)[досье]
Валера[досье]
Хм, а в какой мейл-клиент используется? Пробовали в других?
спустя 9 минут [обр] Валера(6/24)[досье]
dacuan[досье], я через web-интерфейс смотрю почту, mail.ru. Кстати, щас посмотрю что в gmail творится.
спустя 3 минуты [обр] Валера(6/24)[досье]
...то же самое, картинка открывается сразу и доступна по ссылке для скачивания
спустя 13 минут [обр] dacuan(7/7)[досье]
Валера[досье] А если в каком-нибудь оконном менеджере?
спустя 20 минут [обр] Валера(6/24)[досье]
dacuan[досье], лень ставить. Но предполагаю что там все будет нормально, возможно что это особенность почтовых программ с web-интерфейсом.
Powered by POEM™ Engine Copyright © 2002-2005