Сегодня ваял небольшой php скриптик по email рассылке (стандартная Битрикс не подошла, т.к. в процессе нужно было перегенерировать пароли и произвести ещё кое какие манипуляции).
Писал конечно же в кириллице, кодировку использовал utf-8 и собственно, столкнулся с проблемой:
При получении письма в теме были кракозябры (текст gmail видимо сам перекодировал — проблем не было).
Собственно, 3 минуты гугла и решение найдено
На всякий случай, код перепубликую у себя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
<? // Поскольку кодировка php (обычно это utf-8) и кодировка писем (обычно это windows-1251) часто отличаются, то ещё и желательно их перекодировать. Вот функция, которая проводит все необходимые манипуляции: function mime_header_encode($str, $data_charset, $send_charset){ if($data_charset != $send_charset) $str=iconv($data_charset,$send_charset.‘//IGNORE’,$str); return (‘=?’.$send_charset.‘?B?’.base64_encode($str).‘?=’); } //Я всегда был за расширяемость кода, поэтому отправку писем оформил в отдельный класс: class TEmail{ public $from_email; public $from_name; public $to_email; public $to_name; public $subject; public $data_charset=‘UTF-8’; public $send_charset=‘windows-1251’; public $body=»; public $type=‘text/plain’; function send(){ $dc=$this->data_charset; $sc=$this->send_charset; //Кодируем поля адресата, темы и отправителя $enc_to=mime_header_encode($this->to_name,$dc,$sc).‘ <‘.$this->to_email.‘>’; $enc_subject=mime_header_encode($this->subject,$dc,$sc); $enc_from=mime_header_encode($this->from_name,$dc,$sc).‘ <‘.$this->from_email.‘>’; //Кодируем тело письма $enc_body=$dc==$sc?$this->body:iconv($dc,$sc.‘//IGNORE’,$this->body); //Оформляем заголовки письма $headers=»; $headers.=«Mime-Version: 1.0\r\n»; $headers.=«Content-type: «.$this->type.«; charset=».$sc.«\r\n»; $headers.=«From: «.$enc_from.«\r\n»; //Отправляем return mail($enc_to,$enc_subject,$enc_body,$headers); } } //Вот так мы будем отправлять письма: //Текстовое письмо echo(‘Plain text email — sending…<br>’); $email=new TEmail; $email->from_email=‘noreply@konservs.com’; $email->from_name=‘Автор ІЇҐЭЄ іїґэє’; $email->to_email=‘******@gmail.com’; $email->to_name=‘Для Васі’; $email->subject=‘Тема ІЇҐЭЄ іїґэє’; $email->body=‘Текстовий тестовий лист. Тест: ІЇҐЭЄ іїґэє’; if($email->send()) echo(‘Plain text email — OK.<br>’); else echo(‘Plain text email — Error!<br>’); //HTML письмо echo(‘HTML email — sending…<br>’); $email=new TEmail; $email->from_email=‘noreply@konservs.com’; $email->from_name=‘Автор ІЇҐЭЄ іїґэє’; $email->to_email=‘******@gmail.com’; $email->to_name=‘Для Васі’; $email->subject=‘Тема ІЇҐЭЄ іїґэє’; $email->type=‘text/html’; $email->body=‘Тестовий лист в HTML. <h1>Header 1 (Заголовок 1)</h1> <h2>Header 2 (Заголовок 2)</h2> <h3>Header 3 (Заголовок 3)</h3> <h4>Header 4 (Заголовок 4)</h4> <h5>Header 5 (Заголовок 5)</h5> Тест: ІЇҐЭЄ іїґэє’; if($email->send()) echo(‘HTML email — OK.<br>’); else echo(‘HTML email — Error!<br>’); ?> |