За последние 24 часа нас посетил 15561 программист и 1618 роботов. Сейчас ищут 732 программиста ...

E-mail с файлом: рус в теме не чит. и файл переименовывает

Тема в разделе "Прочие вопросы по PHP", создана пользователем serge!, 26 сен 2008.

  1. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    Здравствуйте!
    Уважаемые создатели форума - у вас отличный форум, но сделайте пожалуйста больше букв в Теме сообщения писать - неудобно очень если честно, понятно не опишешь тему, слишком теснить приходится, понятно конечно что краткость - сестра таланта, но не до такой же степени.. :)

    Большая просьба помочь, наверняка многие сталкивались с такой проблеммой как у меня:

    1) Прикреплённый файл у меня называется mail.zip (архив, содержит файл mail.php, в котором русский и английский текст).
    Он прикрепляетсяи отправляется нормально и доходит, но уже с ругим именем, имя каждый раз разное, "скайнэт" сам его придумывает на свой машинный вкус - например такое: attg1m4w.dat - бессмысленное и всегда .dat, что бы не отправлял.
    При этом содержимое архива полностью нормально доходит (mail.php и текст - всё хорошо (хотя я только на одном почтовике проверял)).

    2) русские символы в теме письма не читаются, заменяются на крокозябликов или ещё каких животных.

    вот код, он вполне рабочий, необходимо только заменить $file_name и $mail_to вверху на ваше, чтобы он выполнился.

    PHP:
    1.  
    2.  <?php    
    3. $file_name = "mail.zip";  
    4. $theme = "ThemeMy (Тема)";  
    5. $msg = "Сообщение (Subject)";  
    6. $mail_to = "somemail@somname.ru";  // Отправляем почтовое сообщение  
    7. send_mail($mail_to, $theme, $msg, $file_name);   // Вспомогательная функция для отправки почтового сообщения с вложением  
    8.  
    9. function send_mail($to, $theme, $messtxt, $fname) {    
    10.   $fp = fopen($fname,"r");    
    11.   if (!$fp) {      
    12.     print "Файл $fname не может быть прочитан";      
    13.     exit();
    14.   }    
    15.   $file = fread($fp, filesize($fname));    
    16.   fclose($fp);        
    17.   $boundary = "--".md5(uniqid(time())); // генерируем разделитель    
    18.   $headers .= "MIME-Version: 1.0\n";    
    19.   $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    20.   $multipart .= "--$boundary\n";    
    21.   $kod = 'windows-1251'; // или $kod = 'koi8-r';    
    22.   $thm = $theme;
    23.   $multipart .= "Content-Type: text/plain; charset=$kod\n";    
    24.   $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";    
    25.   $multipart .= "$messtxt\n\n";    
    26.   $message_part = "--$boundary\n";    
    27.   $message_part .= "Content-Type: application/octet-stream\n";    
    28.   $message_part .= "Content-Transfer-Encoding: base64\n";    
    29.   $message_part .= "Content-Disposition: attachment; filename = \"".$fname."\"\n\n";    
    30.   $message_part .= chunk_split(base64_encode($file))."\n";    
    31.   $multipart .= $message_part."--$boundary--\n";    
    32.   if(!mail($to, $thm, $multipart, $headers)) {      
    33.     echo "Письмо не отправилось";      
    34.     exit();
    35.   }
    36. }
    37. ?>
    38.  
     
  2. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    3)Честно говоря ещё одна проблеммка обнаружилась - почему-то не приходит на Mail.ru, yandex.ru, hotmail.com, gmail.com
    только на мою почту (установленную в организации, где работаю)

    подскажите пожалуйста, что я делаю нетак!
     
  3. Anonymous

    Anonymous Guest

    скорее всего, они тебя считают спамером.
     
  4. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    похоже на то,
    как только написать код так, чтобы не думали про меня так плохо?
     
  5. Anonymous

    Anonymous Guest

    никак. Дело не столько в коде, сколько в сервере, на котором ты размещен.
     
  6. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    а почему так? Что в серверах бывает не так?
    может какие-то настройки?
    странно то что в папку "Спам" на этих серверах оно тоже не попадает.
     
  7. Anonymous

    Anonymous Guest

    В серверах этих бывает то, что на них много клиентов, и они тупо занесены по IP в черный лист.
     
  8. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    имел в виду, что может быть не так на сервере где я размещён?
     
  9. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Скачай phpmailer и не парься. Там есть возможность подключиться к smtp серверу. Прочесть кодировку, принимаемую сервером, затем установить такой же тип соединения и данных. Затем только отправлять.
     
  10. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    Большое спасибо всем!
    Попробую phpmailer
     
  11. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    крокожаблики вместо русских букв

    Здравствуйте!
    до бесплатных серверов не доходит, но это дело действительно в сервере, с которого посылаю.
    удалось запустить phpmailer под php4 (который у нас стоит) - хорошо отправляет, только неизвестных животных (крокожаб, крокозябликов и т.п.) вместо русских букв пишет, пока не знаю как с этим справиться.
    Хотя phpmailer хвалят за то что он умеет определять кодировку на сервере получателе, а потом отправляет письмо... но у меня он почему-то не сумел.
    Вы не знаете, как phpmailer относится к русскому тексту?
     
  12. Anonymous

    Anonymous Guest

    Так же как и к любому другому. для него это набор байт.
    Вы письмо шлете в формате HTML или plain text ?
     
  13. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    имел в виду может ли phpmailer отправлять письма на русском читаемые, чтобы там нигде не было проблем с кодировкой.
    и если может, то сам он это делает или надо настроить? или использовать какие-то функции в нём, которые отвечают за передачу русского текста, может какой то модуль к программе надо подключать?
    просто очень хвалят пакет, а у меня с русским текстом какие-то сложности.

    .. и в html-формате и с простым текстом.
     
  14. Anonymous

    Anonymous Guest

    минмальный проблемный код приведите.
     
  15. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    По поводу читаемости русского.
    мин. проблемный код:
    (только не знаю... если у вас есть phpmailer, то вы сможете его запустить, если положите в папку examples phpmailera)
    вообще-то он там уже есть, этот код я из этой папки и взял - тестовый phpmailer-овский.



    PHP:
    1.  
    2. <?php
    3.  
    4. include_once('../class.phpmailer.php');
    5.  
    6. $mail             = new PHPMailer(); // defaults to using php "mail()"
    7.  
    8. $body             = $mail->getFile('contents.html');
    9. $body             = eregi_replace("[\]",'',$body);
    10. $body            .= "<br><br>"."Привет! Как дела?";
    11.  
    12. $mail->From       = "name@yourdomain.com";
    13. $mail->FromName   = "First Last";
    14.  
    15. $mail->Subject    = "от Сергея - Привет!";
    16.  
    17. $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
    18.  
    19. $mail->MsgHTML($body);
    20.  
    21. $mail->AddAddress("whoto@otherdomain.com", "John Doe");
    22.  
    23. $mail->AddAttachment("images/phpmailer.gif");             // attachment
    24.  
    25. if(!$mail->Send()) {
    26.   echo "Mailer Error: " . $mail->ErrorInfo;
    27. } else {
    28.   echo "Message sent!";
    29. }
    30.  
    31. ?>
    32.  
    [/php]
     
  16. Anonymous

    Anonymous Guest

    contents. html приведите.
     
  17. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    contents.html - доходит и отображается нормально, там всё по английски.
    русский текст плохо:

    $body .= "<br><br>"."Привет! Как дела?";

    а в contents.html такой код:

    HTML:
    1.  
    2. <body background="images/bkgrnd.gif" style="margin: 0px;">
    3. <div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;">
    4. <div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br>
    5. <br>
    6. &nbsp;This is a test of PHPMailer v2.0.0 rc1.<br>
    7. <br>
    8. This particular example uses <strong>HTML</strong>, with a &lt;div&gt; tag and inline<br>
    9. styles.<br>
    10. <br>
    11.  
    12. Also note the use of the PHPMailer at the top with no specific code to handle
    13. including it in the body of the email.</div>
    14. </body>
    15.  
    по поводу кодировки прочитал что там есть файлы в phpmailer в каталоге language
    в частности файл phpmailer.lang-ru.php
    его нужно как-то подключить... Попробую сейчас с этим разобраться.
     
  18. Anonymous

    Anonymous Guest

    а где секция head с указанием кодировки?
     
  19. serge!

    serge! Активный пользователь

    С нами с:
    26 сен 2008
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Иркутск
    спасибо
    всё верно, теперь в теле письма русский текст читается, а в теме письма стал читаться когда настроил параметр в phpmailer-е:

    там п.у. стоял $CharSet = 'iso-8859-1';

    переопределил его
    $mail = new PHPMailer();
    ...
    $mail->CharSet = "windows-1251";

    теперь в теме нормально (правда ещё не проверял на бесплатных серверах, может там с кодировками ещё что-то будет).