20999


PHPで自分用（管理者）に届くメール文章と  
差出人に届く文章を変更したかったので  
定形であったmail.phpの管理者欄の名前とテキストの項目を下記のように追加したら（もともと定形のものに管理者に届く差出人の名前とテキスト項目はなかった）フォームから届く管理者用のメール文章の項目で名前とテキストの項目は追加されていましたが届いたメールは文字化けした状態になっていました。  
どうしたら文字化けすることなく管理者宛に名前とテキストが追加された  
状態で届くようになるのでしょうか。全文は下のソースコードのところに記載しております。  
ちなみにフォームのあるcontact.htmlのヘッダーは`<meta http-equiv="content-type"
content="text/html;charset=Shift_JIS">`でmail.phpもshift_jisの設定で管理者のところに名前とテキスト項目を入れるまでは正常に  
届いたのでこちらが原因ではなさそうです。

ソースコード

■全文(文字制限があったためこちらに載せました)  
mail.php

<https://www.evernote.com/shard/s687/sh/6575c872-a53c-43b0-ba67-4ee792ad0442/820429a269a5c41cb1ffaf5de598851b>


CC BY-SA 3.0
2016-01-17T07:45:00.380
20996
2016-01-18T05:44:17.393
2016-01-17T16:17:28.403
76
14035
question
php
送信したメールが文字化けする


送信後にリダイレクトしてしまっているのでわかりにくいですが、341行目のリダイレクト処理を潰してみると、色々エラーが出ていることがわかります。

[code]

    Notice: Undefined variable: dsp_name in R:\custom.php on line 486
    
    Call Stack:
        0.0005     178496   1. {main}() R:\custom.php:0
        0.0009     185680   2. mailToAdmin() R:\custom.php:224
    
    
    Notice: Undefined variable: subject_text in R:\custom.php on line 487
    
    Call Stack:
        0.0005     178496   1. {main}() R:\custom.php:0
        0.0009     185680   2. mailToAdmin() R:\custom.php:224
    
    
    Notice: Undefined variable: userBody in R:\custom.php on line 487
    
    Call Stack:
        0.0005     178496   1. {main}() R:\custom.php:0
        0.0009     185680   2. mailToAdmin() R:\custom.php:224
    
    
    Warning: mb_convert_encoding(): Illegal character encoding specified in R:\custom.php on line 500
    
    Call Stack:
        0.0005     178496   1. {main}() R:\custom.php:0
        0.0009     185680   2. mailToAdmin() R:\custom.php:224
        0.0325     187168   3. mb_convert_encoding() R:\custom.php:500
    
[/code]

224行目で `mailToAdmin()`
に渡す引数を増やしているのに、その関数が受け取る引数は増えていないので、引数がずれてしまっています。484行目と519行目を比べてみてください。そして本来
`$encode` が渡されるべき場所に `$mailFooterDsp`
が渡されていて、エンコーディング変換がエラーになっています（上記4つ目のエラー）。管理者宛のメールが文字化けしてしまうのはこのためです。

また `mailToAdmin()` に書き足した箇所は `mailToUser()` からコピーしてきたようですが、本文を設定する変数名が
`$userBody`
のままになっているため、変数が見つからないというエラーが出ています（上記3つ目）。文字化けとは関係なく、管理者宛のメールには文章を追加できていないでしょう。

残りの前半2つのエラーもそれぞれ変数 `$dsp_name` `$subject_text` が見つからないというものです。

冒頭の設定で使われている変数名と引数名が同じなので紛らわしいですが、設定に書いた `$dsp_name` や `$remail_text` がどのように
`mailToUser()` に渡され、 `$userBody` に埋め込まれ、 `mb_convert_encoding()`
を経てreturnされているのか、追っかけてみてください。


CC BY-SA 3.0
2016-01-17T10:03:56.750
20999
2016-01-18T05:44:17.393
2016-01-18T05:44:17.393
8000
8000
20996
answer