We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 33018
    • 12 Posts
    ども、こんばんは。
    いつも非常に参考にさせていただいております。

    さて、件名にあるとおりスニペット“Newsletter”の文字化けの件です。
    http://modxcms.com/Newsletter-574.html


    設定後、送信されたメールの件名部分が文字化けしてしまいます。
    スニペットの326行目にある“charset=iso-8859-1”を色々変更してみたりしたのですが、やはり駄目でした。

    こちらが使っているのは、MODx Version(s): 0.9.6.1となります。
    スニペット自体の対応バージョンは、「MODx Version(s): 0.9.2.1, 0.9.2, 0.9.1」とあります。

    以上、宜しくお願い致します。
      • 19033
      • 892 Posts
      こんにちは。

      コミュニケーションツールとして便利そうなスニペットですね。
      私も試してみました。が、サブジェクトも内容も文字化けしていました。
      たぶん、動作自体は、096でも問題はないのでは...と思いますが。

      しかし私では解決できません。。

      前回のJotの通知が文字化けする件といい、MODxで、メール通知がうまくいっているのは、
      もしかしてZeRoさんが、対応版を出して下さっているeFromだけなのでしょうか。。

      今後のことを考えますと、メール通知の文字化けの件は、なんとかクリアできればと思います。。
      解決策でお心当たりがある方、おられましたら、ぜひよろしくお願い致します。

      もしかすると他でも通知メールが化ける件があるのかも知れませんね。
      ちょっと調べてみます。私自身が普段使わない機能なので盲点だったかも。。
        • 33018
        • 12 Posts
        MEGUさん、おはようございます。

        対応ありがとうございます。
        こーいうメール送信系は、ビジネス用途では結構需要があるので何とかなればと思ってます。

        今回、客先の旧サイトがxoopsのイベント案内モジュールを入れてましてMODxに変更するにあたってイベント情報ページの更新をメールで送りたいとリクエストされてます。

        xoops eguide
        http://xoopscube.jp/modules/mydownloads/singlefile.php?cid=6&lid=330

        できれば、ドキュメント作成時に自動で登録ユーザーにメール送信できるようになればと色々探したのですが最悪手動でメール送信するしかないのかなと思いこのスニペットをテストしております。
        テンプレート変数で、ドキュメント個々にて設定できればいいんですが…。
          • 36592
          • 970 Posts
          MODxでのメールの扱いは、やや微妙な感じですね~
          多くのSnippet等はPHPの「mail()関数」を使っていて、日本語に限らずよく文字化けの報告が上がっていますね。
          NewsletterスニペットもJotもこの関数でメール送信しているみたいです。

          eFormについてはPHPMailerというクラス(manager/includes/controls/class.phpmailer.php)を使っていて、今後はこちらを使おうよ!みたいな発言もあるようです。が、方向性はまだ出てないような... ちなみに、MODx同梱のPHPMailerはかなり古いみたいですね。最新版はこちら。

          ZeRoさんのiso-2022-jp版では、PHPMailerを拡張して対応(modxmailer.inc.php)されているようです。

          mail()関数で書かれている部分を、このZeRoさんの拡張したクラスを使って書き換えてやれば、比較的簡単に文字化けせずにメールを送れるようになるような気がしますが... あ~やっぱり私のスキルではここまで! :’(
            • 4708
            • 11 Posts
            2007/12/19 コード修正しました :’(
            メール送信で文字化けする件について報告するスレ
            http://modxcms.com/forums/index.php/topic,20954.0.html
            のほうでちょっと書きましたが、動作確認してみました。
            結果としては、私の環境では文字化けせずにメールが受信できました。

            環境は以下
            PHP 5.2.1
            MODX 0.9.6.1
            Newsletter 0.2b

            やったことは
            1. Newsletterの326行目の ’iso-8859-1’ を ’iso-2022-jp’ に変更

            2. 379行目から394行を以下のコードに差し替え
            // Send Out Email
            mb_language('ja');     // 追加
            mb_internal_encoding($modx->config['modx_charset']);   //追加
            // -- Remove duplicate email ($toemail)
            $toemail = array_flip($toemail);
            $toemail = array_flip($toemail);
            // -- Email $toemail ($toemail)
            for($i = 0; $i < count($toemail); $i++) {
            	mb_send_mail($toemail[$i], $subject, $content, $headers);  //mb_send_mailに変更
            }
            // -- Remove duplicate email ($tousers)
            $touemail = array_flip($touemail);
            $touemail = array_flip($touemail);
            // -- Email $touemail ($tousers)
            for($i = 0; $i < count($touemail); $i++) {
            	mb_send_mail($touemail[$i], $subject, $content, $headers);  //mb_send_mailに変更  2007/12/19修正
            }
            // Return flag
            return true;
            


            3. ドキュメントに [!Newsletter? &mode=`msg`!] として対象ページでTo(WebUser Group)を選択、To:, Subject:, Document: に入力して"Send"!

            受信しましたが、文字化けなし smiley
            一応お知らせしておきます。

              • 33018
              • 12 Posts
              Cassiopeiaさん、ありがとうございます。

              こちらの環境ですが、
              PHP 4.3.2
              MODX 0.9.6.1
              Newsletter 0.2b
              となります。

              コードの差し替え等行い送信してみましたが、
              やはり“Your message had been sent!”とは出るのですが届かないですー :’(。
              Cassiopeiaさんとの違いはPHPのバージョンですが、これが原因なのでしょうか?。

              うーむ…。
                • 4708
                • 11 Posts
                なぜでしょうね・・・・ huh

                172行と198行付近?にある
                <input type="hidden" name="from" value="[email protected]" />

                のvalueにご自身のメールアドレスを設定すれば、メールサーバでエラーがあれば、
                何か帰ってくるかもしれません。
                  • 19033
                  • 892 Posts
                  直前の私の投稿、不明瞭だったので、削除しました。ごめんなさい。
                  もう少しテストします。
                    • 19033
                    • 892 Posts
                    こんにちは。
                    Cassiopeia さん。どうもありがとうございます。

                    私も、試してみました。
                    ---*---*---*---*---*---
                    XREA+
                    PHP5.2.3
                    MODx0961

                    メール送信するかしないかのテスト
                    とりあえず、メール送信するかしないかのテストをしてみました。

                    test1
                    		// Generate Headers
                    		if(strtolower($type) == 'html') $contentType = 'text/html; charset=iso-2022-jp';


                    および
                    		// Send Out Email
                    		mb_language('ja');
                    		mb_internal_encoding($modx->config['modx_charset']);
                    		// -- Remove duplicate email ($toemail)
                    		$toemail = array_flip($toemail);
                    		$toemail = array_flip($toemail);
                    		// -- Email $toemail ($toemail)
                    		for($i = 0; $i < count($toemail); $i++) {
                    			mb_send_mail($toemail[$i], $subject, $content, $headers);
                    		}
                    		// -- Remove duplicate email ($tousers)
                    		$touemail = array_flip($touemail);
                    		$touemail = array_flip($touemail);
                    		// -- Email $touemail ($tousers)
                    		for($i = 0; $i < count($touemail); $i++) {
                    			mb_send_mail($toemail[$i], $subject, $content, $headers);
                    		}
                    		// Return flag
                    		return true;
                    	}


                     メール送信しません。

                    test2.
                    		// Generate Headers
                    		if(strtolower($type) == 'html') $contentType = 'text/html; charset=iso-2022-jp';

                    及び
                    		// Send Out Email
                    		mb_language('ja');
                    		mb_internal_encoding($modx->config['modx_charset']);
                    		// -- Remove duplicate email ($toemail)
                    		$toemail = array_flip($toemail);
                    		$toemail = array_flip($toemail);
                    		// -- Email $toemail ($toemail)
                    		for($i = 0; $i < count($toemail); $i++) {
                    			mail($toemail[$i], $subject, $content, $headers);
                    		}
                    		// -- Remove duplicate email ($tousers)
                    		$touemail = array_flip($touemail);
                    		$touemail = array_flip($touemail);
                    		// -- Email $touemail ($tousers)
                    		for($i = 0; $i < count($touemail); $i++) {
                    			mail($touemail[$i], $subject, $content, $headers);
                    		}
                    		// Return flag
                    		return true;
                    	}


                     メール送信します

                    test3
                    		// Generate Headers
                    		if(strtolower($type) == 'html') $contentType = 'text/html; charset=iso-2022-jp';

                    及び
                    		// Send Out Email
                    		mb_language('ja');
                    		mb_internal_encoding($modx->config['modx_charset']);
                    		// -- Remove duplicate email ($toemail)
                    		$toemail = array_flip($toemail);
                    		$toemail = array_flip($toemail);
                    		// -- Email $toemail ($toemail)
                    		for($i = 0; $i < count($toemail); $i++) {
                    			mb_send_mail($toemail[$i], $subject, $content, $headers);
                    		}
                    		// -- Remove duplicate email ($tousers)
                    		$touemail = array_flip($touemail);
                    		$touemail = array_flip($touemail);
                    		// -- Email $touemail ($tousers)
                    		for($i = 0; $i < count($touemail); $i++) {
                    			mb_send_mail($toemail[$i], $subject, $content, $headers);
                    		}
                    		// Return flag
                    		return true;
                    	}
                    

                    及びフォームの「To:」に有効メールアドレスを入力

                    「To:」に入力したメールアドレスにのみメールが届きます(なぜか2通届くのはスニペットの仕様...?)

                    うちの環境では、なぜか「mail」を「mb_send_mail」にするとWEBユーザのメールアドレスに
                    メールが届かないようです...???
                      • 4708
                      • 11 Posts
                      コードに誤りがありました、すみません :’(

                      2つ目のmb_send_mailのところ
                      mb_send_mail($toemail[$i], $subject, $content, $headers);

                      ではなくて
                      mb_send_mail($touemail[$i], $subject, $content, $headers);


                      $touemail
                      です。2通届くのはこれが原因です。
                      前のポストも修正しておきました。混乱させて申し訳ない。