We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7763
    • 4 Posts
    Весь сайт у меня в кодировке utf-8.

    Соответственно письма тоже хочу что бы отсылались в utf-8 (а почему нет?). Меня интересуют письма которые приходят от системы пользователям при регистрации (тело письма и заголовок можно задать в конфигурации)

    Единственно куда я капнул, это в файлике manager/includes/controls/class.phpmailer.php, нашел строку

    [tt]var $CharSet = "iso-8859-1";[/tt]

    и поставил там utf-8. Вроде как, у тела письма кодировка стала правильной, но не у заголовка.

    При этом, я так понимаю что по стандарту нужно указывать в заголовке письма Content-Type: ...; charset=... в приходящих письмах этого нет.

    Посоветуйте что нибудь дельное пожалуйста что бы письма приходили в utf-8 (в идеале в кодировке которая указана в системе).
      • 31738
      • 20 Posts
      та же проблема.
      какую кодировку в класс отправки писем class.phpmailer.php не вписывай, всё равно приходит абракадабра вместо кириллицы

      простой пример - письмо, которое отправляется при смене пароля
        • 26564
        • 162 Posts
        var $CharSet  = "utf8";  Без "-" !
          • 23506
          • 156 Posts
          Вписывал utf8 не приходит в нужной кодировке(
            • 15610
            • 15 Posts
            Здравствуйте!

            Хотелось все же решить проблему или действительно никто не знает решение?
            "utf8" указал, но почтовый клиент автоматически отказывается определять эту кодировку. Приходится выбирать вручную, тогда нормально, хотя заголовок все равно остается корявый. Если кто то нашел решение, пожалуйста подскажите...
              • 12149
              • 12 Posts
              Проблема не из приятных, и так с налету ее не решишь.

              Дело в том что phpmailer упроно не прописывает в заголовке писем:
              Content-Type: text/plain; charset=UTF-8; format=flowed
              Content-Transfer-Encoding: 8bit

              ... а должен, потому что в коде class.phpmailer.php - это есть.

              Подозрение, что сниппет weblogin к примеру, сам составляет письмо и прикрепляет к непу текст (напоминание пароля, к примеру) из базы. Но своего мэйлера у weblogin нету.

              Поэтому, почему так происходит совсем не ясно.

              Кто знает, помогите, пожалуйста, решить трабл!
                • 25614
                • 7 Posts
                Quote from: Higher at Jul 26, 2008, 12:22 PM

                Подозрение, что сниппет weblogin к примеру, сам составляет письмо и прикрепляет к непу текст (напоминание пароля, к примеру) из базы. Но своего мэйлера у weblogin нету.

                Поэтому, почему так происходит совсем не ясно.

                Вы правы, мэйлера у weblogin нет, но есть у php (http://www.phpclub.net/manrus/f/mail.html)

                далее предлагаю решение

                в weblogin.common.inc.php

                // Send new password to the user
                function webLoginSendNewPassword($email,$uid,$pwd,$ufn){

                ...
                ...

                $emailsubject = $modx->config[’emailsubject’];

                ...
                ...

                $headers="From: ".$emailsender."\r\n"
                . "Content-Type: text/plain; charset=UTF-8\r\n"
                . "MIME-Version: 1.0\r\n"
                . "Content-Transfer-Encoding: 8bit \r\n"
                . "X-Mailer: MODx Content Manager - PHP/".phpversion()."\r\n";
                $emailsubject="=?UTF-8?B?".base64_encode($emailsubject)."?=\r\n";//<-работает мать его

                if(!mail($email, $emailsubject, $message, $headers)) {
                return webLoginAlert("Ошибка, не удалось отправить сообщение по адресу: $mailto",1);
                }
                return true;
                }


                -------------------------------------------------
                аналогично в файле weblogin.processor.inc.php ...
                  • 12149
                  • 12 Posts
                  Quote from: RRay at Jul 28, 2008, 03:17 PM


                  Вы правы, мэйлера у weblogin нет, но есть у php (http://www.phpclub.net/manrus/f/mail.html)

                  далее предлагаю решение


                  Спасибо! Проблема решилась!
                  Все ходит теперь в нормальной кодировке, включая заголовки.
                    • 5644
                    • 78 Posts
                    <?php
                    /**
                     * Commonly used login functions
                     * Writen By Raymond Irving April, 2005
                     *
                     */
                    
                        // extract declarations
                        function webLoginExtractDeclarations(&$html){
                            $declare  = array();
                            if(strpos($html,"<!-- #declare:")===false) return $declare;
                            $matches= array();
                            if (preg_match_all("/<\!-- \#declare\:(.*)[^-->]?-->/i",$html,$matches)) {    
                                for($i=0;$i<count($matches[1]);$i++) {
                                    $tag = explode(" ",$matches[1][$i]);
                                    $tagname=trim($tag[0]);
                                    $tagvalue=trim($tag[1]);
                                    $declare[$tagname] = $tagvalue;
                                }
                                // remove declarations
                                $html = str_replace($matches[0],"",$html);
                            }
                            return $declare;
                        }
                    
                        // show javascript alert    
                        function webLoginAlert($msg){
                            return "<script>window.setTimeout(\"alert('".addslashes(mysql_escape_string($msg))."')\",10);</script>";
                        }
                    
                        // generate new password
                        function webLoginGeneratePassword($length = 10) {
                            $allowable_characters = "abcdefghjkmnpqrstuvxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";
                            $ps_len = strlen($allowable_characters);
                            mt_srand((double)microtime()*1000000);
                            $pass = "";
                            for($i = 0; $i < $length; $i++) {
                                $pass .= $allowable_characters[mt_rand(0,$ps_len-1)];
                            }
                            return $pass;
                        }    
                    
                        // Send new password to the user
                        function webLoginSendNewPassword($email,$uid,$pwd,$ufn){
                            global $modx, $site_url;
                            $mailto = $modx->config['mailto'];
                            $websignupemail_message = $modx->config['websignupemail_message'];    
                            $emailsubject = $modx->config['emailsubject'];
                            $emailsender = $modx->config['emailsender']; 
                            $site_name = $modx->config['site_name'];
                            $site_start = $modx->config['site_start'];
                            $message = sprintf($websignupemail_message, $uid, $pwd); // use old method
                            // replace placeholders
                            $message = str_replace("[+uid+]",$uid,$message);
                            $message = str_replace("[+pwd+]",$pwd,$message);
                            $message = str_replace("[+ufn+]",$ufn,$message);
                            $message = str_replace("[+sname+]",$site_name,$message);
                            $message = str_replace("[+semail+]",$emailsender,$message);
                            $message = str_replace("[+surl+]",$site_url,$message);
                            if (!ini_get('safe_mode')) $sent = mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion(), "-f {$emailsender}");
                            else $sent = mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion());
                            if (!$sent) webLoginAlert("Ошибка при отсылке письма на $mailto",1);
                            return true;
                        }
                        
                        function preserveUrl($docid = '', $alias = '', $array_values = array(), $suffix = false) {
                    		global $modx;
                    		$array_get = $_GET;
                    		$urlstring = array();
                    	
                    		unset($array_get["id"]);
                    		unset($array_get["q"]);
                    		unset($array_get["webloginmode"]);
                    	
                    		$array_url = array_merge($array_get, $array_values);
                    		foreach ($array_url as $name => $value) {
                    			if (!is_null($value)) {
                    				$urlstring[] = urlencode($name) . '=' . urlencode($value);
                    			}
                    		}
                    	
                    		$url = join('&',$urlstring);
                    		if ($suffix) {
                    			if (empty($url)) {
                    				$url = "?";
                    			} else {
                    				$url .= "&";
                    			}
                    		}
                    		return $modx->makeUrl($docid, $alias, $url);
                    	}
                    
                    ?>

                    Код немного поменялся с момента публикации поста. Как решить эту же проблему?
                      • 16289
                      • 121 Posts
                      Заменить:
                       function webLoginSendNewPassword($email,$uid,$pwd,$ufn){
                              global $modx, $site_url;
                              $mailto = $modx->config['mailto'];
                              $websignupemail_message = $modx->config['websignupemail_message'];    
                              $emailsubject = $modx->config['emailsubject'];
                              $emailsender = $modx->config['emailsender']; 
                              $site_name = $modx->config['site_name'];
                              $site_start = $modx->config['site_start'];
                              $message = sprintf($websignupemail_message, $uid, $pwd); // use old method
                              // replace placeholders
                              $message = str_replace("[+uid+]",$uid,$message);
                              $message = str_replace("[+pwd+]",$pwd,$message);
                              $message = str_replace("[+ufn+]",$ufn,$message);
                              $message = str_replace("[+sname+]",$site_name,$message);
                              $message = str_replace("[+semail+]",$emailsender,$message);
                              $message = str_replace("[+surl+]",$site_url,$message);
                              if (!ini_get('safe_mode')) $sent = mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion(), "-f {$emailsender}");
                              else $sent = mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion());
                              if (!$sent) webLoginAlert("Ошибка при отсылке письма на $mailto",1);
                              return true;
                          }

                      на
                       function webLoginSendNewPassword($email,$uid,$pwd,$ufn){
                              global $modx, $site_url;
                              $mailto = $modx->config['mailto'];
                              $websignupemail_message = $modx->config['websignupemail_message'];    
                              $emailsubject = $modx->config['emailsubject'];
                              $emailsender = $modx->config['emailsender']; 
                              $site_name = $modx->config['site_name'];
                              $site_start = $modx->config['site_start'];
                              $message = sprintf($websignupemail_message, $uid, $pwd); // use old method
                              // replace placeholders
                              $message = str_replace("[+uid+]",$uid,$message);
                              $message = str_replace("[+pwd+]",$pwd,$message);
                              $message = str_replace("[+ufn+]",$ufn,$message);
                              $message = str_replace("[+sname+]",$site_name,$message);
                              $message = str_replace("[+semail+]",$emailsender,$message);
                              $message = str_replace("[+surl+]",$site_url,$message);
                      		//kpoxas
                      		include_once "manager/includes/controls/class.phpmailer.php";
                      				# send
                      					$mail = new PHPMailer();
                      					$mail->IsMail();
                      					$mail->CharSet = $modx->config['modx_charset'];
                      					$mail->IsHTML($isHtml);
                      					$mail->From		= $emailsender;
                      					$mail->FromName	= $site_name;
                      					$mail->Subject	= $emailsubject;
                      					$mail->Body		= $message;
                      					AddAddressToMailer($mail,"to",$email);
                      					//$mail->send(); //ignore mail errors in this case 
                      		
                             /*if (!ini_get('safe_mode')) $sent = mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion(), "-f {$emailsender}");
                              else $sent = mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion());*/
                              if (!$mail->send()) webLoginAlert("Error while sending mail to $mailto",1);
                              return true;
                          }
                        How could number of mysql queries be more than number of tables in DB???