質問 > その他 > メール送信時の改行について教えて下さい。 |
その他
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 2007/8/28 16:57
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 どこの部分の値を聞かれているのかがわからないので長文となり申し訳ございませんがGC_SendMail.phpを全文入れます。
<?php //--- テキスト/HTML メール送信 class GC_SendMail { var $html; // HTML メールヘッダー var $to; // 送信先 var $subject; // 題名 var $body; // 本文 var $header; // ヘッダー var $return_path; // return path var $mailer; /* ヘッダ等を格納 $to -> 送信先メールアドレス $subject -> メールのタイトル $body -> メール本文 $fromaddress -> 送信元のメールアドレス $header -> ヘッダー $from_name -> 送信元の名前(全角OK) $reply_to -> reply_to設定 $return_path -> return-pathアドレス設定(エラーメール返送用) $cc -> カーボンコピー $bcc -> ブラインドカーボンコピー */ function setTo($to, $to_name = "") { if($to_name != "") { $name = ereg_replace("<","<", $to_name); $name = ereg_replace(">",">", $name); $name = mb_encode_mimeheader(mb_convert_encoding($name, "JIS", CHAR_CODE)); $this->to = $name . "<" . $to . ">"; } else { $this->to = $to; } } function setItem( $to, $subject, $body, $fromaddress, $from_name, $reply_to, $return_path, $errors_to="", $bcc="", $cc ="" ) { $this->to = $to; $this->subject = $subject; // iso-2022-jpだと特殊文字が?で送信されるのでJISを使用する。 $this->body = mb_convert_encoding( $body, "JIS", CHAR_CODE); // ヘッダーに日本語を使用する場合はMb_encode_mimeheaderでエンコードする。 $from_name = ereg_replace("<","<", $from_name); $from_name = ereg_replace(">",">", $from_name); $from_name = mb_convert_encoding($from_name,"JIS",CHAR_CODE); $this->header = "From: ". Mb_encode_mimeheader( $from_name )."<".$fromaddress.">\n"; $this->header .= "Reply-To: ". $reply_to . "\n"; $this->header .= "Cc: " . $cc. "\n"; $this->header .= "Bcc: " . $bcc . "\n"; $this->header .= "Errors-To: ". $errors_to ."\n"; $this->return_path = $return_path; } function setItemHtml( $to, $subject, $body, $fromaddress, $from_name, $reply_to, $return_path, $errors_to="", $bcc="", $cc ="" ) { $this->to = $to; $this->subject = mb_encode_mimeheader($subject); $this->body = mb_convert_encoding( $body, "JIS", CHAR_CODE); $this->header = "Mime-Version: 1.0\n"; $this->header .= "Content-Type: text/html; charset=iso-2022-jp\n"; $this->header .= "Content-Transfer-Encoding: 7bit\n"; $this->header .= "From: ". Mb_encode_mimeheader( $from_name )."<".$fromaddress.">\n"; $this->header .= "Reply-To: ". $reply_to . "\n"; $this->header .= "Cc: " . $cc. "\n"; $this->header .= "Bcc: " . $bcc . "\n"; $this->header .= "Errors-To: ". $errors_to ."\n"; $this->return_path = $return_path; } // メール送信を実行する function sendMail() { Mb_language( "Japanese" ); // メール送信 $this->body = str_replace("\r", "\n", str_replace("\r\n", "\n", $this->body)); if( mb_send_mail( $this->to, $this->subject, $this->body, $this->header) ) { return true; } return false; } function sendHtmlMail() { Mb_language( "Japanese" ); // メール送信 $this->body = str_replace("\r", "\n", str_replace("\r\n", "\n", $this->body)); if( mb_send_mail( $this->to, $this->subject, $this->body, $this->header) ) { return true; } return false; } } ?> 現在このようになっております。 |
|
nanasess |
投稿日時: 2007/8/28 14:46
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: メール送信時の改行について教えて下さい。 引用:
mbstring.language の値はどうなっていますか? |
ゲスト |
投稿日時: 2007/8/28 14:25
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 何度もお返事ありがとうございます。
function sendHtmlMail内を // メール送信 $this->body = str_replace("\r", "\n", str_replace("\r\n", "\n", $this->body)); if( mb_send_mail( $this->to, $this->subject, $this->body, $this->header) ) { とすると本文は改行されるのですが管理者に送られるメルマガ配信完了のSubject部分のみが文字化けしてしまいます。 // メール送信 $this->body = str_replace("\r", "\n", str_replace("\r\n", "\n", $this->body)); if( mail( $this->to, $this->subject, $this->body, $this->header) ) { とすると文字化けもしませんが改行もされない状態です。 GC_SendMail.phpの改行コードをLFとしてみたのですが 同じ結果でした。 羽生さんの回答も参考にしてみたのですが私の知識がなく応用の方法がいまいちわからなく断念してしまいました・・・ |
|
habu |
投稿日時: 2007/8/28 10:44
対応状況: −−−
|
長老 登録日: 2006/9/15 居住地: 投稿: 282 |
Re: メール送信時の改行について教えて下さい。 羽生と申します。
メールの改行問題で、先ほど別のスレッドに返信した後、 ここにも同じスレッドがある事に気付きました。 既に解決済みの様ですが、 \x0Dや、\x0A についての言及は無い様でしたので、 2つのスレッドの橋渡しの為、投稿致します。 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=980&forum=10&post_id=3415#forumpost3415 |
ゲスト |
投稿日時: 2007/8/27 14:52
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 再び(横から入ってきた)ゲストです。
とりあえず回避できたようで、よかったですね。(注文のメールで改行がなくなると、目も当てられない状態になりますよね。。。) ”管理者に届く送信完了のメール”とは、メルマガ送信完了時に送られるメールですよね。 あれは(メルマガがテキストメールであるかHTMLメールであるかにかかわらず)HTMLメールとして送信されるようです(※)。 処理としては今回1行入れていただいたfunctionのすぐ下にある function sendHtmlMail のほうが実行されていると思います。 私はHTMLメールを扱ったことがないので、こちらについては”・・・?”です。よければ、ためしてみてください。 ※この辺の処理はhtml/admin/mail/sendmail.phpを見るとわかります。 今、ラピッドで動かしている方でどうなるか試してみたのですが、Outlookでもちゃんと改行されてました(ラピッドのほうはスクリプト変えていません)。 - ラピッドで動かしているEC-CUBEは1.3.1a - XREAで動かしているEC-CUBEは1.3.4 という違いはあるのですが、多分この辺の処理は変わっていないと思います(ということで、やはりこの現象はサーバによるようです)。 補足:追加した1行は改行コードをLFに統一する、という処理なので、テンプレートの改行がLFであれば、問題は発生しないのかもしれません。 |
|
ゲスト |
投稿日時: 2007/8/27 12:43
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 メルマガもテストしてみたところ改行されるようになりました!
管理者に届く送信完了のお知らせが改行されていませんでしたがこれは別に設定するものなのでしょうか? ひとまずお客さんに送信されるメールの改行が正常になりずっとわからずに困っていたので本当に助かりました。 詳しく教えて頂きましてありがとうございました。 |
|
ゲスト |
投稿日時: 2007/8/26 15:12
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 (横からはいってきた)ゲストです。
> どのファイルのどの部分 data/class/GC_SendMail.phpの82行目あたりにsendMailというfunctionがあります。このfunctionの中の // メール送信 if( mb_send_mail(・・・・・) のmb_send_mailがメール送信なので、この直前に上記の1行を追加しました。 ※この対処方法が正しいのかどうかはわかりませんが。。。 追記:受注時のメールと問い合わせメールで改行が入ることを確認しました。メルマガはテストしていません。 |
|
ゲスト |
投稿日時: 2007/8/25 19:09
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 各tplファイルを確認しましたところ改行コードは
CR+LFとなっています。 これでなにか原因がわかるといいのですが^^; または、回答してくれたゲストさんの通り $this->body = str_replace("\r", "\n", str_replace("\r\n", "\n", $this->body)); として解決するならいいのですがどのファイルのどの部分に足したらいいのかが全くわかりません。 お手数お掛けしますが宜しくお願い致します。 |
|
ゲスト |
投稿日時: 2007/8/25 13:04
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 すいません、上記のゲストです。
上の最後 > 解釈違いやもっとよい対応など”ありましたが” は、「ありましたら」の間違いです。失礼しました。 |
|
ゲスト |
投稿日時: 2007/8/25 12:56
対応状況: −−−
|
Re: メール送信時の改行について教えて下さい。 横から失礼します。
今までThunderbirdでメール受信していたので気づかなかったのですが、Outlookで受信してみたら、私も改行なしの状態になりました。 (ちなみにThunderbirdで受信すると改行がすべて2個になってしまう状態で、そのうち直さなければ・・・とは思っていたのですが) 以前、メール送信時の改行の扱いで困ったことがあって、その時に調べた記憶では(うろおぼえのところがありますが) ・Windows、Mac、Unixで改行コードは違う(これは当たりまえ) ・メールサーバ(あるいはサーバ環境?)によっても、改行の扱いが違う =>メール送信時には改行コードを統一して送る ということで、いつも使っているコードをGC_SendMail.phpのメール送信処理の直前に入れてみました。 $this->body = str_replace("\r", "\n", str_replace("\r\n", "\n", $this->body)); 一応これでOutlookでも改行がある状態で受信できるようになりました(かつ、Thunderbirdでも改行が正しく1個で表示されるようになりました) ちなみにサーバはXREAです。 XREAのほかにラピッドのサーバもさわっているのですが、こちらは Thunderbirdでの受信時、改行は1個=正しく表示されているようです。 ※ラピッド&Outlookでは試してません。気になるのでそのうち試してみようと思います。 メールサーバの挙動に関して私自身の理解が非常にあいまいなので、解釈違いやもっとよい対応などありましたが、ご指導ください。 |
|
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |