Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#26 2006-06-12 20:09:24

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

yama.kyms さんの発言:
		if (mb_send_mail($this->getOption('sendto'),$senddata['title'],$senddata['body'],$senddata['mailfrom'])) {
			$result = "ok";
			if ($autoReply == true) {
				$returnFrom =  "From:".$CONF['AdminEmail']."\r\n";
				if ( mb_send_mail($senddata['email'],$returnTitle,$returnBody,$returnFrom)) {
					$result = "ok";
				} else {
					$result = _IFORM_ERROR_AUTOREPLY;
				}
			}
		} else {
			$result = _IFORM_ERROR_MAILSEND;

このへんがなんとなく気になります。どうすればいいかまでは分からないですが。
「$result = _IFORM_ERROR_MAILSEND」で「メール送信失敗」を表示してるのですよね。

そうですね。
mb_send_mailからtrueが返ったときはok、そうでない場合は、エラーとしてエラーメッセージを表示する形になっています。
mb-emulator.phpの684行目

	mail($to, $subject, $message, $additional_headers, $additional_parameter); 

となっているところを

return mail($to, $subject, $message, $additional_headers, $additional_parameter); 

とすればいいんじゃないかと思います。

オフライン

#27 2006-06-12 20:17:25

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

自己レスです

https://sourceforge.jp/projects/mbemulator/

にmb-emulatorの最新版が置いてあるみたいですね。

nucleusのlibsに入っているものではなく、直接ダウンロードしてセットしたほうがいいようです。
nucleus同梱のものは0.37ですね・・・ :?

上記の最新版(0.84)ならmailコマンドの返り値をreturnするだけでよさそうです。

具体的には、mb-emulatorの0.84の場合、747行目、757行目、766行目を

return  mail($to, $subject, $message, $additional_headers, $additional_parameter); 

または

$result = mail($to, $subject, $message, $additional_headers, $additional_parameter);
return $result;

のようにするとよいかと思います。

オフライン

#28 2006-06-13 10:27:40

rento
メンバー
From: Los Angeles, CA
登録日: 2006-06-01
投稿: 32

Re: NP_ItemFormmail

ありがとうございます! big_smile
kosugiatkipsさんの前の投稿に書かれていたとおり、

kosugiatkips さんの発言:

具体的には、mb-emulatorの0.84の場合、747行目、757行目、766行目を

return  mail($to, $subject, $message, $additional_headers, $additional_parameter); 

または

$result = mail($to, $subject, $message, $additional_headers, $additional_parameter);
return $result;

のようにするとよいかと思います。

と最新版のを修正したら、ちゃんと

「お問い合わせありがとうございました」

とのメッセージがでました。
が、emulatorの最新版だと文字が化けてしまっています。

おくられてくるメールには

Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

となっていて、webメールでエンコードをutfー8にしても
そのままになります。

mb_internal_encodingをutf-8にすれば

というところがキチンとできていないためかとも思われるのですが、
そこはどうすればいいのでしょうか?

同包のエミュレーターでちゃんと表示できていたため、
最新版にしたときに文字化けしているのを見落としていたようです。
:cry:

オフライン

#29 2006-06-13 13:41:40

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_ItemFormmail

kosugiatkips さんの発言:

具体的には、mb-emulatorの0.84の場合、747行目、757行目、766行目を

return  mail($to, $subject, $message, $additional_headers, $additional_parameter); 

または

$result = mail($to, $subject, $message, $additional_headers, $additional_parameter);
return $result;

のようにするとよいかと思います。

次のリリースで修正します。

オフライン

#30 2006-06-13 21:28:38

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

rento さんの発言:

おくられてくるメールには

Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

となっていて、webメールでエンコードをutfー8にしても
そのままになります。

mb_internal_encodingをutf-8にすれば

というところがキチンとできていないためかとも思われるのですが、
そこはどうすればいいのでしょうか?
:

お試しいただきありがとうございます。
まだまだ、開発版なので不具合がたくさんあると思いますが・・・。

さて、メール送信時の問題については、
・現在の環境
・何がしたいか
を書いていただけると助かります。
環境としては、php のmbstringまわりの設定値を書いてください。
mb_internal_encoding の値と、mb_languageの値がどうなっているか
必須で、この状態でJISで送りたいかUTF-8で送りたいかによって設定の仕方が変わるかと思います。

オフライン

#31 2006-06-14 16:29:01

rento
メンバー
From: Los Angeles, CA
登録日: 2006-06-01
投稿: 32

Re: NP_ItemFormmail

色々ありがとうございます。

kosugiatkips さんの発言:

さて、メール送信時の問題については、
・現在の環境
・何がしたいか
を書いていただけると助かります。
環境としては、php のmbstringまわりの設定値を書いてください。
mb_internal_encoding の値と、mb_languageの値がどうなっているか
必須で、この状態でJISで送りたいかUTF-8で送りたいかによって設定の仕方が変わるかと思います。

・現在の環境
設定ということはphp.infoで見たものでmb_stringを探せばいいということでしょうか?
ネットでその件に関する物を調べてみたのですが、わからなかったんですが、
php.infoではmb_stringの項目はありませんでした。

・何がしたいか
送るのは基本的に、可能性があるのがスペイン語、英語、日本語なのでその3つを
おくりたいです。となればやはりUTF-8かと思っています。

これで答えになっているでしょうか?

色々海外サーバーだとPHPとMySQLが使えるので便利だと思ったんですが
不便な点も多くあるんですね。

オフライン

#32 2006-06-17 06:08:52

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

rento さんの発言:

・現在の環境
設定ということはphp.infoで見たものでmb_stringを探せばいいということでしょうか?
ネットでその件に関する物を調べてみたのですが、わからなかったんですが、
php.infoではmb_stringの項目はありませんでした。

・何がしたいか
送るのは基本的に、可能性があるのがスペイン語、英語、日本語なのでその3つを
おくりたいです。となればやはりUTF-8かと思っています。

phoinfoでmbstringが出ないということは、mbstringがインストールされていない環境でmb-emulatorの0.84ベースでUTF-8のnucleusが動作しているということでよろしいでしょうか。

その場合、
mb-emulator.iniの内容はいかがでしょうか。
あと、Itemformmailv0.3に対して編集した部分があれば、お知らせください。

下記のようなファイルを実行することで、UTF-8でメール送信ができる環境かどうか確認できます。
$rcptto = "your@address";のところは受信用のメールアドレスを記載してください。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>メール送信テスト</title>
</head>

<body>
<?php 
mb_language('uni');
mb_internal_encoding('UTF-8');
$messages = "
テストメッセージの本文

こちらは適当に編集してかまいません。




";
$subject = "テスト用件名";
$rcptto = "your@address";
$from = "from:" . mb_encode_mimeheader ( "メール送信元日本語名") . "<" . "test@example.co.jp" . ">";

if (mb_send_mail($rcptto,$subject,$messages,$from)) {
	echo "メール送信成功";
} else {
	echo "メール送信失敗";
}
?>
</body>
</html>

オフライン

#33 2006-06-18 20:23:53

rento
メンバー
From: Los Angeles, CA
登録日: 2006-06-01
投稿: 32

Re: NP_ItemFormmail

phoinfoでmbstringが出ないということは、mbstringがインストールされていない環境でmb-emulatorの0.84ベースでUTF-8のnucleusが動作しているということでよろしいでしょうか。

そうです。それってやっぱりおかしいでしょうか?

utf-8でメールが送信できるか、のスクリプトは動きませんでした。
こんなエラーがでます。

Fatal error: Call to undefined function: mb_language() in /home/zenored/public_html/test.html on line 10

パターンを色々変えてやってみましたところ、日本語ならば、

エミュレーターは最新版0.84で

kosugiatkips さんの発言:

具体的には、mb-emulatorの0.84の場合、747行目、757行目、766行目を

return  mail($to, $subject, $message, $additional_headers, $additional_parameter); 

または

$result = mail($to, $subject, $message, $additional_headers, $additional_parameter);
return $result;

のようにするとよいかと思います。

の箇所の訂正、

itemFormmailは
「mb_language("uni");」を「mb_language("Japanese");」にしました。

これで日本語でのメールはちゃんと届くようになりました。
しかし、これではJapaneseで送る事になってしまい、utf-8では送れていないって事ですよね?

mb-emulator.iniは何もせずです。
レポートになっているでしょうか。

オフライン

#34 2006-06-19 09:10:31

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

rento さんの発言:

phoinfoでmbstringが出ないということは、mbstringがインストールされていない環境でmb-emulatorの0.84ベースでUTF-8のnucleusが動作しているということでよろしいでしょうか。

そうです。それってやっぱりおかしいでしょうか?

おかしくはないですよ^^
mbstringまわりはmb-emulatorでなくてもいろいろと振る舞いが微妙だったりするので、整理方々、情報収集させていただきました。

rento さんの発言:

utf-8でメールが送信できるか、のスクリプトは動きませんでした。
こんなエラーがでます。

Fatal error: Call to undefined function: mb_language() in /home/zenored/public_html/test.html on line 10

すみません。スクリプトの冒頭でmb-emulator.phpをインクルードしないと動きませんね。失礼しました。:oops:

rento さんの発言:

itemFormmailは
「mb_language("uni");」を「mb_language("Japanese");」にしました。

これで日本語でのメールはちゃんと届くようになりました。
しかし、これではJapaneseで送る事になってしまい、utf-8では送れていないって事ですよね?

そうですね。JISで送りたいケースならmb_language("Japanese");でよいのですが、UTF-8で送るときは「mb_language("uni");」としておいてください。


Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64
が本文に表示されてしまうのは、メールヘッダに余分な\r\nが入っているときに発生しやすいと思われます。

\r\nの重複チェックコードをmb-emulatorに入れても良いのですが、こちらで調べたところ、
Itemformmail 0.3の262行目を

$mailheaders .= $senddata['mailfrom']."\r\n";

から

$mailheaders .= $senddata['mailfrom'];

に変更し
266行目

$returnFrom =  "From:".$CONF['AdminEmail']."\r\n";

$returnFrom =  "From:".$CONF['AdminEmail'];

に変更すると、改行コードの重複は避けられます。


総合すると、mb_language("uni");に戻した上で、上記2点の修正をした場合、メール送信がどうなるかをお試しいただけたらありがたいです。

オフライン

#35 2006-06-24 17:00:42

rento
メンバー
From: Los Angeles, CA
登録日: 2006-06-01
投稿: 32

Re: NP_ItemFormmail

こんばんは。返事が遅くなって申し訳ないです。

やってみました。
が、

Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

というヘッダーと、下には文字化けした文字がずらずらっと並んでいる状態です。

オフライン

#36 2006-06-25 12:11:16

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

rento さんの発言:

やってみました。
が、

Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

というヘッダーと、下には文字化けした文字がずらずらっと並んでいる状態です。

多分、文字化けではなく、エンコードされた文字列がそのまま出てきてしまっているのだと思われます。
ヘッダに無駄な改行が入ってメールソフトがエンコードと理解せず本文扱いしているものと思いますが、こちらにmb-emulatorのテスト環境がないので推測でしかないのですが。。


mb-emulator.iniの下記の部分ですが、

language=ja
internal_encoding=

language=uni
internal_encoding=UTF-8

としてみてください。
この部分が影響しているのかもしれません。

オフライン

#37 2006-07-01 18:28:46

rento
メンバー
From: Los Angeles, CA
登録日: 2006-06-01
投稿: 32

Re: NP_ItemFormmail

やってみました。

メールアドレスだけが文字化けというかエンコード
されている?状態のようですが、
Thunderbirdだときちんと読めました!

ありがとうございます。

hotmail.comだと文字化けしてしまって、エンコードを変えても
一部が読めなかったりでした。
私はthunderbirdなので大丈夫でしたが、hotmailだとダメでしょうね。

日本のサーバーで設置したとしたら、hotmailでも読めることに
なるのでしょうかね?

オフライン

#38 2006-07-01 21:50:29

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: NP_ItemFormmail

そのへんはkosugiatkipsさんも悩んでるようですが、
たぶんUTF-8にすべきかJISにすべきか、ってことなんでしょうね。
PHPのバージョンの違いによって、いろいろあるみたいです。
それでとりあえず差異の少なそうなUTF-8が採用されています。
あとはメールクライアント次第ですね。

ちなみに僕は自分の環境で使えることを確認したうえでJIS出力に書き換えました。

オフライン

#39 2006-07-02 14:48:28

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

rento さんの発言:

hotmail.comだと文字化けしてしまって、エンコードを変えても
一部が読めなかったりでした。
私はthunderbirdなので大丈夫でしたが、hotmailだとダメでしょうね。

日本のサーバーで設置したとしたら、hotmailでも読めることに
なるのでしょうかね?

hotmailに関してはUTF-8に対応していないのかもしれません。

http://www.gmail-maniacs.net/docs/000172.html

UTF-8で送る場合、UTF-8対応のメーラーが必要になります。
UTF-8環境でJISに変換してメールを送ると髙などの一部の文字は化けてしまってそれ以降送れないなどの問題があるので、UTF-8環境からはUTF-8メールを送る方がいいかなという個人的な理由で現在(0.3.1)の仕様になっています。

携帯で受け取りたい場合や、UTF-8非対応のメーラーで受け取りたい場合などもあるので送信用の文字コードは選択できるようにするべきなんだと思っています。

差出人アドレスに日本語を含める必要はないかなと思っていますが、一応残してあるっていう感じです。

若干調整したものをアップしてみましたが、症状は変わらないかもです。0.3.2

オフライン

#40 2006-07-04 17:44:28

rento
メンバー
From: Los Angeles, CA
登録日: 2006-06-01
投稿: 32

Re: NP_ItemFormmail

hotmail自体がUTF-8に対応してないんですね。
私はmacユーザーですが、他のメールもグループで使うときにhotmailに送信すると
文字化けるので、面倒ながらもhotmailの設定を変えて、ヘッダー総表示にして、
そこから別画面で読む、という方法でしかないのだと知りました。

でもこれでhotmailでも読めるので、一応は大丈夫っていうことですよね。
アップされたのも試してみますね。

オフライン

#41 2006-07-10 19:06:03

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: NP_ItemFormmail

最新版の0.32を試してみました。文字化けが見られたので報告します。
送信ボタンをクリックした後のプレビュー画面(確認画面)が以下のように化けます。

<td class="form-name">住æ園</td>
<td class="form-value">ãユãせト</td>
</tr><tr>
<td class="form-name">ãさメント</td>
<td class="form-value">表示ãユãせト</td>
</tr><tr>
<td class="form-name">æ€ァ蛻¥</td>
<td class="form-value">ç塙諤§</td>
</tr><tr>
<td class="form-name">E-mail</td>
<td class="form-value">山譛¬<></td>

環境はNucleus3.23、UTF-8です。

オフライン

#42 2006-07-10 19:37:50

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

バグレポありがとうございます。
調べてみたいと思います。

# 0.3.2はつなぎ的なものになっていて、もうすぐ、0.4.xを出す予定になっています。

オフライン

#43 2006-07-10 19:44:52

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

	function suni($str) {
	return htmlentities(undoMagic($str),ENT_QUOTES,mb_internal_encoding());
	}
	function suniview($str) {
		return nl2br(htmlentities(undoMagic($str),ENT_QUOTES,mb_internal_encoding()));
	}

この関数の第3引数をカラにして

	function suni($str) {
	return htmlentities(undoMagic($str),ENT_QUOTES);
	}
	function suniview($str) {
		return nl2br(htmlentities(undoMagic($str),ENT_QUOTES));
	}

としてみたら、治るような気がしますがどうでしょうか。

オフライン

#44 2006-07-10 20:36:48

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: NP_ItemFormmail

試してみました。少し結果が違うようですが、まだ化けます。

<td class="form-name">ä½・aelig;園</td>
<td class="form-value">ãユã・sup1;ãヨ</td>
</tr><tr>
<td class="form-name">ã・sup3;ã・iexcl;ã・sup3;ãヨ</td>
<td class="form-value">表示ãユã・sup1;ãヨ</td>
</tr><tr>
<td class="form-name">性å・yen;</td>

オフライン

#45 2006-07-10 20:43:51

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

この文字化けは、POSTされたデータを誤ってHTMLエンティティに変換しているようなのですが、それを行っているのは、下記のブロックだけです。

 function suni($str) {
   return htmlentities(undoMagic($str),ENT_QUOTES,mb_internal_encoding());
   }
   function suniview($str) {
      return nl2br(htmlentities(undoMagic($str),ENT_QUOTES,mb_internal_encoding()));
   }

普通の設定でここが問題になることはないのですが・・・

UTF-8の環境とのことですが、mb関連の設定はどうなっていますでしょうか?

オフライン

#46 2006-07-10 20:49:16

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: NP_ItemFormmail

mb関連はこのようになってます。(ローカルバリュー)

mbstring.detect_order auto
mbstring.encoding_translation Off
mbstring.func_overload 0
mbstring.http_input auto auto
mbstring.http_output pass
mbstring.internal_encoding no value
mbstring.language Japanese
mbstring.substitute_character no value

ちなみに、文字コードを決め打ちにすると正常にプレビューできました。
具体的には下記のようにしました。

return htmlentities(undoMagic($str),ENT_QUOTES,'UTF-8');
}
function suniview($str) {
	return nl2br(htmlentities(undoMagic($str),ENT_QUOTES,'UTF-8'));
}

オフライン

#47 2006-07-10 20:53:30

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

入力時に変換している場合は、mb_http_input()を使用するべきなのかもしれません。

	function suni($str) {
	return htmlentities(undoMagic($str),ENT_QUOTES,mb_internal_encoding());
	}
	function suniview($str) {
		return nl2br(htmlentities(undoMagic($str),ENT_QUOTES,mb_internal_encoding()));
	}

の部分ですが、

function suni($str) {
	if (mb_http_input("P")) 
		$encode = mb_http_input("P");
	else
		$encode = mb_internal_encoding();

	return htmlentities(undoMagic($str),ENT_QUOTES,$encode);
}
function suniview($str) {
	if (mb_http_input("P")) 
		$encode = mb_http_input("P");
	else
		$encode = mb_internal_encoding();
	
	return nl2br(htmlentities(undoMagic($str),ENT_QUOTES,$encode));
}

としてみたらどうでしょうか。

オフライン

#48 2006-07-10 21:01:39

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

mbstring.internal_encoding no value
ということは、UTF-8環境になっていない可能性がありますね。
internal_encodingを利用するmb系の関数 mb_convert_kanaとかいろんなところで影響を受けそうな感じですね。できれば、これだけは指定した方がよいかと思われます。

mbstring.http_input auto auto
のautoが二つというのはコピペ時のタイポでしょうか。

mbstring.encoding_translation = OFF
ですか・・・すると、htmlentitiesにかける前に、文字コードを内部エンコードに変換するべきかもしれません。

$str = mb_convert_encoding($str,"UTF-8",auto);
をはさんでみたらどうでしょうか。

オフライン

#49 2006-07-10 21:07:26

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_ItemFormmail

サーバの設定値をかえるのは手間かもしれないので、
mb_internal_encoding("UTF-8");
をはさんでみるだけで違うかもしれません。
たとえば、function init()内とかに設定するだけで、違うと思います。

オフライン

#50 2006-07-10 21:14:10

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: NP_ItemFormmail

> mb_internal_encoding("UTF-8");

とりあえずこれで対応してみました。
しかしItemFormMail以外のところで何か不具合がある可能性はありますね。
いい機会なので.htaccessを整備しておくことにします。

オフライン

Board footer