mb_send_mailでHTMLメールを送信すると
受信メールのヘッダ情報が勝手に追加されてしまいます。

【PHP内で指定しているヘッダ】
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-2022-jp' . "\r\nX-Mailer: PHP/".phpversion();

【受信メールのヘッダ情報】
Mime-Version: 1.0
Mime-Version: 1.0
Content-Type: text/html; charset=iso-2022-jp
Content-Type: text/plain; charset=ISO-2022-JP
というように、指定もしてないContent-Type: text/plainが
追加されたり、Receivedも同じように勝手に追加されてしまいます。

考えられる原因を教えていただけますか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

mb_send_mail()は、細かいエンコーディングの調整ができないので、どうしても文字化けしがちです。


なので、件名や本文など、日本語が入る項目を個別にエンコーディング変換してからmail()関数に渡すのがオススメです。面倒ですが。
色々試した結果、下記のようにしたら文字化けはなくなりました。(もしかしたら、余分なものもあるかも知れませんが)

1. FROM
日本語名の部分をISO-2022-JPに変換、アドレス部分を追加してからMIME変換

2. SUBJECT
ISO-2022-JPに変換してからBase64に変換

3. 本文
ISO-2022-JPに変換

各変換は下記の関数を使いました。

ISO-2022-JPへの変換
  →mb_convert_encoding()

Base64への変換
  →base64_encode()

MIMEへの変換
  →mb_encode_mimeheader()
    • good
    • 0
この回答へのお礼

ありがとうございます。

教えていただいた方法で試した結果、
本文は、バッチリ文字化けが解消されました。

FROMは日本語を使わなかったので、まだ試してません。
SUBJECTは文字化けが起こってしまったのですが、
mb_encode_mimeheader($subject, "ISO-2022-JP", "Q")にしたら
解決しました。

おかげで勉強になりました。
ありがとうございます!

お礼日時:2009/05/18 18:37

なんともいえませんが、mail()コマンドでもおなじ症状ですか?

    • good
    • 0
この回答へのお礼

ありがとうございます。
mail()だと上記のような現象は起きないのですが、
日本語が件名、本文ともに文字化けしてしまいます。
文字化けしないのであれば、mail()でももちろん構いません。
文字化け解除に断念して、mb_send_mail にしました。

お礼日時:2009/05/18 17:07

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qmb_send_mailでのHTMLメール送信について

こんにちは

PHP でメールフォームを作成しています。
以前、こちらで相談に乗っていただき、
テキストメールの送信は正常に行ましたが、
テキストメールでは、送られてくるメールが貧弱な為、
HTML メールに変更しようと思っています。

$body='';
の中を HTML に書き換えたのですが、
コードのままメールが送られてきます。
どのようにすれば、''内のコードを正しく認識してくれますでしょうか。
mb_send_mailで実現するのは難しいでしょうか。

どなたか、ヒントをください。
よろしくお願いします。

--------------------------------------
今は、以下のようなコードを書いています。

<?php
mb_language('Japanese');
mb_internal_encoding("Shift-JIS");
$header_info="From: ".$_POST['email']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion();
$body='
<html>
<table width="100%" border="1">
<caption>入力内容をご確認いただき、正しければ 「送信」 ボタンを押してください。</caption>
<tr bgcolor="#A9A9A9">
<td colspan=3>依頼者の情報</td>
</tr>
<tr bgcolor="#D3D3D3">
<th width="10%" align="right">1</td>
<td width="50%" align="left" bgcolor="#D3D3D3">所属</td>
<td width="40%"><?php print $section ?></td>
</tr>
<tr>
<th width="10%" align="right">2</td>
<td width="50%" align="left">依頼者</td>
<td width="40%"><?php print $name ?></td>
</tr>
<tr bgcolor="#D3D3D3">
<th width="10%" align="right">3</td>
<td width="50%" align="left" bgcolor="#D3D3D3">メールアドレス</td>
<td width="40%"><?php print $email ?></td>
</tr>
...... 中略
</table>
</html>
';
mb_send_mail($_POST['email'],$_POST['_subject'],$body,$header_info);
?>

こんにちは

PHP でメールフォームを作成しています。
以前、こちらで相談に乗っていただき、
テキストメールの送信は正常に行ましたが、
テキストメールでは、送られてくるメールが貧弱な為、
HTML メールに変更しようと思っています。

$body='';
の中を HTML に書き換えたのですが、
コードのままメールが送られてきます。
どのようにすれば、''内のコードを正しく認識してくれますでしょうか。
mb_send_mailで実現するのは難しいでしょうか。

どなたか、ヒントをください。
よろしくお願いし...続きを読む

Aベストアンサー

>どなたか、ヒントをください。

ではヒント。

Content-Type: text/plain;

ただのテキストになってますよ。

QPHPでHTMLメールを送信、文字化けします。

Mail/mime.php を利用してHTMLメールの送信をしようとしています。
試行錯誤をしているのですが、どうしても文字化けしてしまいます。
データベースから取得したデータをHTMLメールにして送信したいのですが、
このままでは、タイトルはきちんと送れていますが、本分が文字化けします。

何か抜けたり、設定が変だったりはありますでしょうか?
ご教授お願いいたします。

以下にソースを記しています。
データベースとPHPのソースはどちらも【UTF-8】です。

/*-------------------ここから データベースより取得----------*/
$recipients //送信先
$sender //送信元
$Subject //タイトル
$body //本文
/*--------------------ここまでデータベースより取得--------------*/

mb_language("japanese");
mb_internal_encoding("UTF-8");

require_once("Mail.php");
require_once("Mail/mime.php");

$params = array(
"host" => "自ドメイン",
"port" => 587,
"auth" => true,
"username" => "送信元アカウント",
"password" => "********"
);

$mailObject = Mail::factory("smtp", $params);

$mimeObject = new Mail_Mime("\n");
$mimeObject -> setHTMLBody($body);

$bodyParam = array(
"head_charset" => "ISO-2022-JP",
"html_charset" => "Shift_Jis"
);

$body = $mimeObject -> get($bodyParam);

$addHeaders = array(
"To" => "$recipients",
"From" => "$sender",
"Subject" => mb_encode_mimeheader("$Subject")
);

$headers = $mimeObject -> headers($addHeaders);
$mailObject -> send($recipients, $headers, $body);

Mail/mime.php を利用してHTMLメールの送信をしようとしています。
試行錯誤をしているのですが、どうしても文字化けしてしまいます。
データベースから取得したデータをHTMLメールにして送信したいのですが、
このままでは、タイトルはきちんと送れていますが、本分が文字化けします。

何か抜けたり、設定が変だったりはありますでしょうか?
ご教授お願いいたします。

以下にソースを記しています。
データベースとPHPのソースはどちらも【UTF-8】です。

/*-------------------ここから データベースより取...続きを読む

Aベストアンサー

>教えてGOOで助けても=r />らっています
>改行するとこう

文字化けならわかるのですが文字の無い場所に挟まっているのは不思議ですね。
とりあえず$bodyの内容をファイルに出力するか表示して
その時点で問題の文字化けが発生しているか確認できますでしょうか?

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

QPHPsendmailにて送信元を変更

PHPのsendmailにて送信元を変更させたいのですが
現在
mb_send_mail($sendto,$subject,$text,"Form:送信元アドレス")
のようにしているのですが、反映されずサーバーのアドレスにて送信されてしまいます。
ini_set関数にてセットしてみても同じでした。
メールが返信された場合に当方のアドレスまで返信されるように当方のアドレスを送信元表示させたいのですが・・
sendmailの設定を変える必要があるのでしょうか?
なにか良い方法はありませんか?

Aベストアンサー

使い方には問題のないような気が…

>mb_send_mail($sendto,$subject,$text,"Form:送信元アドレス")

"Form" → "From" の綴りの間違いだけだったりして?

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

QPermission denied in

PHPを実行するとWarning: fopen failed to open stream Permission denied inと
表示されてしまいます。
インターネットを使い、調べてはいますが、
上記のように表示してしまいます。
ファイルです。パーミッションは606にしました。

このWarningを表示させないようにするには、どのようにすれば
良いのか教えて頂けると嬉しいです。

Aベストアンサー

あとは
> PHPを実行するユーザーとそのグループはどうなってますか?

PHPを直接コマンドラインから実行するのなら、ユーザーはあなたですが、httpサーバーでモジュールやCGIとして実行するなら別の権限(nobodyとか)になっていると思います。

あとは
ディレクトリのパーミッションを 707 にする
ディレクトリとファイルのオーナーをPHPを実行するユーザーにする
とかでしょうか。

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?

Qaタグに直接style=""で:hoverをしたいしたい

お世話になります。
下記のaタグのCSS記述部分を直接<a href="" style="..."として記述するには
どのようにすればよいのでしょうか
hoverをaタグ内に直接指定しようとしていろいろ調べたのですが、解説しているサイトを見つけられなくて、質問させてもらってます。
A:link.menu {
text-decoration:none;
FONT-SIZE: 12px;
COLOR: #0000ff;
}
A:visited.menu {
text-decoration:none;
FONT-SIZE: 12px;
COLOR: #0000ff;
}
A:hover.menu {
FONT-SIZE: 12px;
color:#0000ff;
background-color:#66bce2;
}
A:active.menu {
FONT-SIZE: 12px;
COLOR: #0000ff;
}

お手数お掛けしますが、どなた様かご教授いただけますようお願い致します。

Aベストアンサー

<a href="http://www.yahoo.co.jp" style="text-decoration:none;FONT-SIZE:12px;COLOR: #0000ff;"
onmouseover="this.style.backgroundColor='66bce2'"
onmouseout="this.style.backgroundColor=''">やふう</a>

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。


人気Q&Aランキング

おすすめ情報