За последние 24 часа нас посетили 37947 программистов и 1809 роботов. Сейчас ищут 855 программистов ...

Почта

Тема в разделе "PHP для новичков", создана пользователем produser, 15 июн 2012.

  1. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Здравствуйте, есть простейший код отправки письма, который после регистрации отправляет пользователю ссылку на подтверждение. Но он почему то работает только если файл, в котором размещен код отправки, сохраненн в кодировке ANSI , если же сохранить файл в utf-8 то письмо просто не доходит, хотя функция mail возвращаяет true...
    Пробывал любой код, везде одинаковый результат, вот последний:

    Код (Text):
    1. function USendMail( $from, $to, $subject, $text)
    2. {
    3. $un = strtoupper(uniqid(time()));
    4. $head = "From: $from\n";
    5. $head .= "To: $to\n";
    6. $head .= "Subject: $subject\n";
    7. $head .= "X-Mailer: PHPMail Tool\n";
    8. $head .= "Reply-To: $from\n";
    9. $head .= "Mime-Version: 1.0\n";
    10. $head .= "Content-Type:multipart/mixed;";
    11. $head .= "boundary=\"----------".$un."\"\n\n";
    12. $mes = "------------".$un."\nContent-Type:text/html;\n";
    13. $mes .= $text;
    14.  
    15.  
    16.  
    17. if (!@mail("$to", "$subj", $mes, $head)){
    18. return 0;}
    19. else {
    20. return 1;
    21. }
    22. }
    23.  
    24. $host=$_SERVER['HTTP_HOST'];
    25. $to  = $mail ;  
    26. $msg='<p>123456</p>
    27.         <p><a href="http://'.$host.'?chk='.$code.'">http://'.$host.'/?chk='.$code.'</a></p> ';
    28.  
    29. USendMail('admin@mail.com.ua',$to,'User validate',$msg);
    Это был код для отправки письма с аттачментом, я его немного видоизменил... Может че выпилил ненароком... Но вроде должен работать...
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    UTF-8 (без BOM) ?

    header пробовали устанавливать?
     
  3. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Да, без бом... Хедеры вроде как устанавливаются в функции...
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    полный код покажите...
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    бинарные данные надо пересылать в закодированном виде. например тем же base64
     
  6. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    вот весь код:
    Код (Text):
    1.  
    2. $code=md5($login.$mail);
    3. function USendMail( $from, $to, $subject, $text)
    4. {
    5. $un = strtoupper(uniqid(time()));
    6. $head = "From: $from\n";
    7. $head .= "To: $to\n";
    8. $head .= "Subject: $subject\n";
    9. $head .= "X-Mailer: PHPMail Tool\n";
    10. $head .= "Reply-To: $from\n";
    11. $head .= "Mime-Version: 1.0\n";
    12. $head .= "Content-Type:multipart/mixed;";
    13. $head .= "boundary=\"----------".$un."\"\n\n";
    14. $mes = "------------".$un."\nContent-Type:text/html;\n";
    15. $mes .= $text;
    16.  
    17.  
    18.  
    19. if (!@mail("$to", "$subj", $mes, $head)){
    20. return 0;}
    21. else {
    22. return 1;
    23. }
    24. }
    25.  
    26.  
    27. $msg='<p>123456</p>
    28.         <p><a href="http://'.$host.'?chk='.$code.'">http://'.$host.'/?chk='.$code.'</a></p> ';
    29.  
    30. USendMail('admin@mail.com.ua',somemail@mail.ru','User validate',$msg);
    Пробывал такой еще код, результат одинаковый..Если в теле есть либо код хтмл, либо хоть одна русская буква - не отправляет(

    Код (Text):
    1.  
    2.      $host=$_SERVER['HTTP_HOST'];
    3.      $to  = $mail;
    4. $subject="Подверждение регистрации";
    5. $header="Content-type: text/plain; charset=\"utf-8\"";
    6. $headers .= "From: \"admin@555.com.ua\"\r\n";
    7. $header.="Subject: $subject";
    8. $header.="Content-type: text/plain; charset=\"utf-8\"";
    9. $msg='
    10. <html>
    11.     <head>
    12.         <title>Письмо</title>
    13.     </head>
    14.     <body>
    15.         <p>Для завершения регистрации перейдите по ссылке ниже</p>
    16.         <p><a href="http://'.$host.'?chk='.$code.'">http://'.$host.'/?chk='.$code.'</a></p>
    17.     </body>
    18. </html>';
    19. if (mail($to, $subject, $msg, $header)) echo('good'); else echo('bed');
    igordata
    Там вроде только хтмл передается... Подскажите какой код будит отправлять 100% в utf-8...
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    попробуй
    Код (PHP):
    1. <?php 
    2. function XMail( $from, $to, $subj, $text, $filename) { 
    3.     $f         = fopen($filename,"rb"); 
    4.     $un        = strtoupper(uniqid(time())); 
    5.     $head      = "From: $from\n"; 
    6.     $head     .= "To: $to\n"; 
    7.     $head     .= "Subject: $subj\n"; 
    8.     $head     .= "X-Mailer: PHPMail Tool\n"; 
    9.     $head     .= "Reply-To: $from\n"; 
    10.     $head     .= "Mime-Version: 1.0\n"; 
    11.     $head     .= "Content-Type:multipart/mixed;"; 
    12.     $head     .= "boundary=\"----------".$un."\"\n\n"; 
    13.     $zag       = "------------".$un."\nContent-Type:text/html;\n"; 
    14.     $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n"; 
    15.     $zag      .= "------------".$un."\n"; 
    16.     $zag      .= "Content-Type: application/octet-stream;"; 
    17.     $zag      .= "name=\"".basename($filename)."\"\n"; 
    18.     $zag      .= "Content-Transfer-Encoding:base64\n"; 
    19.     $zag      .= "Content-Disposition:attachment;"; 
    20.     $zag      .= "filename=\"".basename($filename)."\"\n\n"; 
    21.     $zag      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n"; 
    22.      
    23.     return @mail("$to", "$subj", $zag, $head); 
    24. } 
    25. ?>
     
  8. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    igordata

    Мне не нужно отправлять файл, только хтмл

    Добавлено спустя 11 минут 29 секунд:
    igordata

    Ваш код отправляет, но, если в тексте есть хоть один хтмл тег, то нерботает(

    Код (Text):
    1. function XMail( $from, $to, $subj, $text) {
    2.     $un        = strtoupper(uniqid(time()));
    3.     $head      = "From: $from\n";
    4.     $head     .= "To: $to\n";
    5.     $head     .= "Subject: $subj\n";
    6.     $head     .= "X-Mailer: PHPMail Tool\n";
    7.     $head     .= "Reply-To: $from\n";
    8.     $head     .= "Mime-Version: 1.0\n";
    9.     $head     .= "Content-Type:multipart/mixed;";
    10.     $head     .= "boundary=\"----------".$un."\"\n\n";
    11.     $zag       = "------------".$un."\nContent-Type:text/html; charset=\"utf-8\"\n";
    12.     $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
    13.     $zag      .= "------------".$un."\n";
    14.     $zag      .= "Content-Type: application/octet-stream;";  
    15.      
    16.     return @mail("$to", "$subj", $zag, $head);
    17. }
    18.  
    19. XMail('admin@site.com.ua',$to,'проверка','тест<p>11</p>');
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    суть в том, что тебе надо бы тело закодировать, т.к. юникод подразумевает возможность наличия всяких непечатных символов, которые могут портить жизнь как раз в таких ситуациях.
     
  10. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    igordata

    Но тот код, который вы мне дали, отпарвлял почту с аттачментом. что в моем случае ненужно, я его подправил... Может что то нужное порезал?
    Как закодировать тело письма?

    Добавлено спустя 56 минут 15 секунд:
    Решил такой функой, может кому поможет

     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7