バージョン選択

フォーラム

メニュー

オンライン状況

30 人のユーザが現在オンラインです。 (16 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 30
もっと...

サイト内検索

質問 > その他 > メール送信時の改行について教えて下さい。

その他

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 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
居住地: 大阪
投稿: 2174
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としてみたのですが
同じ結果でした。

羽生さんの回答も参考にしてみたのですが私の知識がなく応用の方法がいまいちわからなく断念してしまいました・・・


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
居住地:
投稿: 277
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 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は72,983名です
総投稿数は102,060件です

投稿数ランキング

1
seasoft
7333
2
468
3072
3
AMUAMU
2712
4
nanasess
2174
5
umebius
2030
6
yuh
1612
7
red
1453
8
h_tanaka
1090
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.