「夫を成功」へ導く妻の秘訣 座談会

PHPmailer(JPHPmailer)を用いてファイルをメールに添付して送信したいのですが、ファイル名が文字化けしてしまいます。
ただすべてがすべてというわけではなく、
PHP(GmailSMTP経由)→Gmail
のときにはきちんと表示され意図している次の場合には文字化けしてしまいます
PHP(GmailSMTP経由)→kindle(ここにファイルを添付して送ると変換してくれるという専用のもの、もちろんGmailから直接添付して送るなどする際には日本語ファイル名にも対応)

以下一部になりますがなにか問題あるのでしょうか?宜しくお願いします。

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

$title = "日本語ファイル名";

$mailer->AddAttachment("./ebook", $title.".pdf");

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

A 回答 (1件)

>PHPmailer



の仕様を知らないので正確な回答ができるかわかりませんが、
普通添付ファイル名はマイムエンコードするもんじゃない?

mb_internal_encoding("UTF-8");
$title = "日本語ファイル名.pdf";
$title=mb_convert_encoding($title,"JIS","UTF-8");
$title=mb_encode_mimeheader($title,"JIS");
$mailer->AddAttachment("./ebook", $title);

みたいな感じ?
    • good
    • 1
この回答へのお礼

件名、本文はしてたのに添付ファイルに関してはすっかり忘れてました!

的確かつ素早い回答有難う御座います。

お礼日時:2011/12/06 16:09

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

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

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

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

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qフォームのtextareaにnl2brを使用すると、入力内容の改行部分に
が表示されてしまう。

現在、フォームを作成しています。
セッションを利用してフォームの次のファイルにデータを受け渡しています。

問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。

フォームの流れ:
start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。
mail.phpにおいて入力内容の確認及びデータ送信。

start.phpのtextarea以下:
<textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea>
解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。)

mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下:
<?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?>

start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。

入力例:
あいうえおかきくけこ
たちつてと

表示例(nl2br使用):
あいうえおかきくけこ<br />
たちつてと
解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。

試しにnl2br()をコードから削除すると、以下のような表示となります。
表示例(nl2br未使用):
あいうえおかきくけこたちつてと
解説:nl2brを使用しない場合、改行されません。

どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか?

よろしくお願いします。

現在、フォームを作成しています。
セッションを利用してフォームの次のファイルにデータを受け渡しています。

問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。

フォームの流れ:
start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。
mail.phpにおいて入力内容の確認及びデータ送信。

start.phpのtextarea以下:
<textarea name="test"><?php echo nl2br(htmlspe...続きを読む

Aベストアンサー

nl2brを使用して、<br />を \n とかに戻してやればいいと思います。
$data = nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8'));
echo ereg_replace ("<br />","\n",$data);
とかで。

QphpMyAdmin にログインできません

phpMyAdmin にログインできません。
ユーザー名 : root
パスワード : password
でログインしようとすると、
#1045 MySQL サーバにログインできません
とでます。

MySql 5.6
phpMyAdmin 4.4.14.1-all-languages

よろしくお願いします。

Aベストアンサー

config.inc.phpの
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] =  <--- を確認。

QHTMLの表で幅を指定しても折り返すことは無理なのでしょうか?

以下のHTMLの表は横幅を指定していますが、
すごく横長な表になってしまいます。セルの幅を指定してもセル内の文字を折り返す事は不可能なのでしょうか?

<html>
<head>
<title>table</title>
</head>
<body>
<table width="570" border="1">
<tr><td width="130"> test1</td>
<td bgcolor="#CCCCCC" width="440">
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</td></tr></table>
</body>
</html>

Aベストアンサー

私も悩みました。(という意味で経験者)
お書きのソースでは、<td>内に英数字がスペースなしで並んでいますね。
これを「途中で改行できない単語」と認識するのだと想像してます。
質問欄も、gooから拝見しますと、<table width="100%"><tr><td width="80%">
のソースにも関わらず、表示はウインドウの外にはみだしています。

ところどころに<wbr>を挿入したら改行してくれないでしょうか?
cgiとかで受取るなら、連続する1バイト文字を数えて<wbr>を挿入
してから、<td>内に書き出すとか。
URLのように、途中を区切れないなら、
<a href="ooooooooooooooooooooooooooooooooooooooooooo">ooooooo...</a>
のように表示分を短縮するとか。(このサイトの「参考URL」のように)

Qサーバーによってはmb_send_mailが実行できないこともあるのでしょうか

現在友人に頼まれて、PHPによるmb_send_mail関数を使ったメールフォームを作成しています。

一度私がレンタルしているサーバーで動作確認をして、その後、友人のレンタルしたサーバーにアップしてみましたが、
なぜか動作してくれません。
私のサーバーですと、何の問題もなく動作します。

こういったケースの場合に考えられるのは、
mb_send_mailの実行をサーバー側で拒否しているのでしょうか。

どうぞお助け下さい。

Aベストアンサー

sendmail_pathにパスが入っているのでsendmailは
使えます。

まず、動かない方のサーバーのphpinfoの上の方の
Configure Commandの中に--enable-mbstringって
入ってますか?

これが入ってればmbstring拡張モジュールが入っているということなので、動かない原因は別のところにあります。エラーメッセージやバージョンなど教えてもらえれば、何か原因がわかるかもしれません。

もし入っていなければ、参考URLのサイトさんで漢字コード変換のスクリプトを配布されていますのでこちらを使わせていただくことをおすすめします。

このスクリプトを使ったフォームメールスクリプトも配布されていますので、参考にしてみてはいかがでしょうか?

参考URL:http://www.spencernetwork.org/

Qアップロードファイル名の文字化け

いつもお世話になっております。

アップロードしたファイルから
$_FILES['userfile']['name'];で、アップしたファイル名を取得しようとするときにファイル名に
特定(後半1バイトが'5C')の漢字を含むとPHPが、'\'と誤認して該当の文字から前を消して表示してきます。
例えば、「内部構造.txt」は、「造.txt」に化けます。move_uploaded_file関数で、アップしたファイルをどこかに保存しようにも、ファイル名が正しく指定できません。
どなたか、対策方法をご教授頂けませんでしょうか?
よろしくお願いいたします。

<?
mb_internal_encoding("EUC");

echo "userfile_name is ".$_FILES['userfile']['name'];
echo "<br>";
echo "userfile_type is ".$_FILES['userfile']['type'];
echo "<br>";
echo "MAX_FILE_SIZE is ".$_POST["MAX_FILE_SIZE"];
echo "<br>";
echo "userfile_tmp_name is ".$_FILES['userfile']['tmp_name'];
echo "<br>";
echo "userfile_error is ".$_FILES['userfile']['error'];
echo "<br>";
echo "userfile_size is ".$_FILES['userfile']['size'];
echo "<br>";


$dir="c:/work/";


if (move_uploaded_file($_FILES['userfile']['tmp_name'], $dir.$_FILES['userfile']['name'])) {
print "File is valid, and was successfully uploaded. ";
}
else
print("UPLOAD ERROR!!");

?>

いつもお世話になっております。

アップロードしたファイルから
$_FILES['userfile']['name'];で、アップしたファイル名を取得しようとするときにファイル名に
特定(後半1バイトが'5C')の漢字を含むとPHPが、'\'と誤認して該当の文字から前を消して表示してきます。
例えば、「内部構造.txt」は、「造.txt」に化けます。move_uploaded_file関数で、アップしたファイルをどこかに保存しようにも、ファイル名が正しく指定できません。
どなたか、対策方法をご教授頂けませんでしょうか?
よろしくお願いいた...続きを読む

Aベストアンサー

Unix系のユーザーかとおもったら、
>$dir="c:/work/";
を見ると、Windowsユーザーですね。

全角文字を使ってファイルを保存したいのなら、
move_uploaded_fileに渡すファイル名をSJISに変換してあげましょう。
mb_convert_encoding($_FILES['userfile']['name'],'SJIS')、みたいに。
ファイル処理は、OSの規則に沿ってください。

\(5C)の問題は、PHPのバージョンにもよりますが、
>echo "userfile_name is ".$_FILES['userfile']['name'];
これで、何が表示されていますか?
EUCできちんと表示されている気がしますが、どうなんでしょ?
まずは、最初の問題をクリアしてください。

Q存在しないページを指定してもTOPページへリダイレクトする方法?

最近ホームページの構成を変更したんですが、検索エンジンから来てルートディレクトリに該当するHTMLファイルがないとpage not foundになってしまいます。
そこで、どんなHTMLファイルにきてもTOPページのindex.htmlに飛ばせる方法ってありますか?
確かhttp://www.directnic.com/ではhttp://www.directnic.com/xxxx とどんなサブディレクトリを指定してもTOPページに行くようになってます。

Aベストアンサー

まず、#2 の方が提示されている様に
.htaccess ファイルを用いて実現できると思います。
(簡単な例示:ErrorDocument 404 /index.html
 DocumentRootから見た絶対パスを記します。)

ただ、ご希望の仕掛けそのままを実現する事は再考をお勧めします。
それはTOPページへ即 飛ばす事です。
閲覧者が当該ページがない事を認識できない可能性があります。
それから質問で提示のサイトも単にTOPページに飛ばしているのではなく、
CGIを用いてエラー情報を編集しているか別のページでTOPページと類似の記述がされている物と思われます。

よって.htaccess ファイルを用いてエラーページを自作してそちらをエラー時に表示する様に指定して、
エラーページにてTOPページと同等の情報を記述しておくかTOPページへのリンクなり自動更新を用意する事をお勧めします。

参考URL:http://www.shtml.jp/htaccess/404.html

Qhtmlのfileタグに自動で値を入れる方法

htmlのタグでいって
<input type="file">を用いてファイルをサーバーにアップロードしたいと思っています。で、このとき、ファイル名は任意に選べるのではなく固定で送信したいと思っています。

すなわち、HTMLを読み込んだ時点で、fileのテキストボックスにファイルパスが埋め込まれているか、JavaScriptで、ファイルパスを自動入力するようにしたいと思っています。

最終的には、form内のオブジェクトをすべて非表示にし、onload時にsubmitするような形にしたいと思っています。いろいろ事情があって苦肉の策になっています…。

とりあえず(だめだとは思っていたのですが)
<input type="file" value="ファイルパス" name="filepath">
と直書きにしてみたり
document.all.filepath.value = "ファイルパス";
などとしてみたりしましたがだめでした…。
W3C勧告の使用上はvalueでファイルパスを指定できるようになっているようなのですが、現在の一般的なブラウザでは禁止されているようですね。

このような場合、何らかの方法でfileにファイルパスを自動入力することはできますでしょうか?
もしできない場合、何らかの方法で実現する方法はありますでしょうか?よろしくお願いします。

ちなみに実現できればいい環境は
WinXP環境のIE6です。言語はクライアント言語はJavaScriptのみで、という条件付です。
できないかもしれないのですが、こういうのって必要になるときもあるよなーなどと思っており、もしかしたら解決方法があるかもしれないと思い質問しました。よろしくお願いします。

htmlのタグでいって
<input type="file">を用いてファイルをサーバーにアップロードしたいと思っています。で、このとき、ファイル名は任意に選べるのではなく固定で送信したいと思っています。

すなわち、HTMLを読み込んだ時点で、fileのテキストボックスにファイルパスが埋め込まれているか、JavaScriptで、ファイルパスを自動入力するようにしたいと思っています。

最終的には、form内のオブジェクトをすべて非表示にし、onload時にsubmitするような形にしたいと思っています。いろいろ事情があって苦肉...続きを読む

Aベストアンサー

やっぱ無理じゃないでしょうか。
なにか裏ワザ的な方法で一時的にできたとしても、いつか直されるかもしれないのでおいそれとは使えないし。

>W3C勧告の使用上はvalueでファイルパスを指定できるようになっている
→参考URL 「ユーザが明示的に送信を求めたファイル以外のものは送ってはいけない」とあります。

参考URL:http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/appendix/notes.html#forms-security

Qheader(Location: next.php) だとPOSTした値が渡らない?

文末は(だいぶ端折ってますが),
(1) エラーがあればエラー表示,
(2) エラーがなければnext.phpに飛ぶ
という動作をするのですが, next.php 内に

echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても
valueの中身が渡ってきていません.
header("Location: next.php"); で飛ばすとだめなのでしょうか.


http://oshiete1.goo.ne.jp/qa2706500.html
でも,#2さんのアドバイスのようにしようとしましたが,
#1さんのご教示のように,セッションを利用するしかないですか?
ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・


<?php
session_cache_limiter('none');
session_start();
header("Cache-control:no-cache");
header("Pragma:no-cache");

$errFlg=false;
if ( $_POST["reg"] == "" ) $errFlg = true;

if ( !$errFlg ) {
if ( $_POST["Name"] == "" ) {
$errFlg = true;
$errStr["Name"] = "未入力";
}
}
if ( $errFlg ) {
?>
<html><body>
<form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
<?= $errStr["Name"] ?></td>
<input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>">
<input type="submit" name="reg" value="登録"></td>
</form>
</body></html>
<?php
} else {
header("Location: next.php");
}
?>

文末は(だいぶ端折ってますが),
(1) エラーがあればエラー表示,
(2) エラーがなければnext.phpに飛ぶ
という動作をするのですが, next.php 内に

echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても
valueの中身が渡ってきていません.
header("Location: next.php"); で飛ばすとだめなのでしょうか.


http://oshiete1.goo.ne.jp/qa2706500.html
でも,#2さんのアドバイスのようにしようとしましたが,
#1さんのご教示のように,セッションを利用するしかないですか?
ちょっ...続きを読む

Aベストアンサー

LocationではPOSTデータは渡せません
セッションでやる方法もありますがそのプログラムなら
else {
header("Location: next.php");
}

else {
require "next.php";
}
にすればいいのではないでしょうか

Q外部smtpサーバーを利用したメールの送信方法

お世話になります。
環境ですが、Linux(CentOs3.6)/php4.2.9、を使っています。

phpで、外部smtpサーバーを利用したメールの送信方法を調べています。
実現したい事は、
メインサーバーから、外部smtpサーバーAと外部smtpサーバーBを利用してメールを送信させたいと思っています。
方法をご存知の方がいらっしゃいましたらご教授下さい。

Aベストアンサー

phpのmail関数は基本的にsendmailの設定でメール送信しています(mb_send_mailも)。ですから、PHP側の設定と言うより、メール転送エージェント(MTA、メール送信サーバ)の設定によります。Sendmail、Postfix、qmail等のことです。要するに、PHPが入っているサーバのMTAから外部SMTPサーバに転送する訳です。設定方法はMTAによって異なります。最近では基本的にOP25B(25番ポートからの送信禁止)だと思いますので、設定に手こずる可能性がありますので注意して下さい。

もっとカスタマイズしたメール送信をしたい、と言う場合はPEARを使うと構築が簡単です。
http://pear.php.net/manual/ja/package.mail.php
送信は
http://pear.php.net/manual/ja/package.mail.mail.send.php
ポート設定や、SMTP-AUTHなSMTPサーバにも対応出来るので、ほとんどのサーバに対応可能かと思います。ただし、うまく組み合わせないと日本語の扱いではまるかもしれません。検索すればかなりヒットしますので、解決可能だと思いますが。

関係無い事かもしれませんが、PHP4.2.9はかなり古いですね。セキュリティ的にちょっと問題がある気がします。LAN内サーバならあまり問題無いですが、踏み台等にならないため、可能な限りアップデートを!

phpのmail関数は基本的にsendmailの設定でメール送信しています(mb_send_mailも)。ですから、PHP側の設定と言うより、メール転送エージェント(MTA、メール送信サーバ)の設定によります。Sendmail、Postfix、qmail等のことです。要するに、PHPが入っているサーバのMTAから外部SMTPサーバに転送する訳です。設定方法はMTAによって異なります。最近では基本的にOP25B(25番ポートからの送信禁止)だと思いますので、設定に手こずる可能性がありますので注意して下さい。

もっとカスタマイズしたメール送信をし...続きを読む


人気Q&Aランキング