PHPMailerのメール受信の文字化けについて

このQ&Aのポイント
  • PHPMailerを使用してメール受信時に日本語文が文字化けする問題について解決方法を教えてください。
  • スマホで受信したメールの件名と本文が文字化けする問題について説明してください。
  • PHPMailerを使用して自動転送されるメールの文字化け問題について、解決方法を教えてください。
回答を見る
  • ベストアンサー

PHPMailerのメール受信の文字化けについて

PHPMailerのメール受信の文字化けについて 付属画像のように日本語文が文字化けしてしまいます。 2台のスマホで受信したのですが、件名の部分と本文の両方文字化けします。もう一つのスマホは本文のみ文字化けします。。ちなみにパソコンで入力フォームで打った文章なのですが、自分のスマホに自動転送された、文字(本文)やタイトルが文字化けしてしまいます。文字化けしないようにするには、どうコードを書いたらよいでしょうか? やっと、やっと、メールの自動転送まで出来たのですが、つまづいています。 ちなみに、学生でもエンジニアでもありません。仕事の合間に独学で勉強しているものです。いずれ実務では使いますが。低レベルな質問ですみません。 回答よろしくお願いいたします コードは以下になります。 <?php // PHPMailer クラスをネーム空間にインポート use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; require('PHPMailer/src/PHPMailer.php'); require('PHPMailer/src/Exception.php'); require('PHPMailer/src/SMTP.php'); // 入力内容の取得・変数に格納 $name    = $_POST['name'];     // 氏名 $to      = $_POST['to'];       // メールアドレス $subject = $_POST['subject'];  // 件名 $message = $_POST['message'];  // 本文 // メール日本語対応 mb_language("japanese"); mb_internal_encoding("UTF-8"); // インスタンス生成 $mail = new PHPMailer(true); // 文字エンコードを指定 $mail->CharSet = 'utf-8'; try {     // デバッグ設定     // $mail->SMTPDebug = 2; // デバッグ出力を有効化(レベルを指定)     // $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};        // SMTPサーバの設定     $mail->isSMTP();                          // SMTPの使用宣言     $mail->Host       = '△.xrea.com';   // SMTPサーバーを指定     $mail->SMTPAuth   = true;                 // SMTP authenticationを有効化     $mail->Username   = '■■■@www.com.jp';   // SMTPサーバーのユーザ名     $mail->Password   = '△△△';           // SMTPサーバーのパスワード     $mail->SMTPSecure = 'tls';  // 暗号化を有効(tls or ssl)無効の場合はfalse     $mail->Port       = 465; // TCPポートを指定(tlsの場合は465や587)             // メール本体     $mail->setFrom('■■■@www.com.jp', 'hazuki');  // 送信元メールアドレスと名前     $mail->addAddress($to, mb_encode_mimeheader($name, 'ISO-2022-JP'));  // 送信先メールアドレスと名前     $mail->Subject = mb_encode_mimeheader($subject, 'ISO-2022-JP');  // 件名     $mail->Body    = mb_convert_encoding($message, "JIS","UTF-8");  // 本文 // 送信     $mail->send();     echo '送信済み'; } catch (Exception $e) {     echo "送信失敗: {$mail->ErrorInfo}"; } ?>

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

phpとメールの文字コードが合ってないのが原因です。

hayosat
質問者

お礼

ありがとうございました。改善しました。

関連するQ&A

  • PHPMailerのコードエラーが解決出来ません

    PHPMailerのコードエラーが解決出来ません。 入力フォームの最終段階で、PHPMailerのコードを使ったプログラムを書いているのですが、PHPMailerの知識が乏しいので、下記のサイトを参考に、書いてあったコードをコピペして、一部を改変して、書いたのですが、付属画像のようなエラーが出てしまいます。書いたコードは下にあります。 参考サイト https://web.hazu.jp/php-mailer/   このサイトからコードをコピペして少しメールや送信する情報等を改変したので、スペル間違いなど、ないと思うのですが、原因は何でしょうか。回答よろしくお願いいたします。全くわかりません。どうコード書いたら良いでしょうか? 回答よろしくお願いいたします。困っています先に進めません。 エラー名;Undefined type'PHPMailer/PHPMailer/PHPMailer' もう一つすぐ下にもエラーが出ます。 エラー名 Undefined type'PHPMailer/PHPMailer/Exception'   全コード一覧 <?php // PHPMailer クラスをネーム空間にインポート use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; // Composer の autoloader をロード require 'vendor/autoload.php'; // 入力内容の取得・変数に格納 $name = $_POST['name']; $furigana = $_POST['furigana']; // メール日本語対応 mb_language("japanese"); mb_internal_encoding("UTF-8"); // インスタンス生成 $mail = new PHPMailer(true); try { // SMTPの設定 $mail->isSMTP(); // SMTP 利用 $mail->Host = 'smtp.gmail.com'; // SMTP サーバー(Gmail の場合これ) $mail->SMTPAuth = true; // SMTP認証を有効にする $mail->Username = '○○@gmail.com'; // ユーザ名 (Gmail ならメールアドレス) $mail->Password = '△△'; // パスワード $mail->SMTPSecure = 'tls'; // 暗号化通信 (Gmail では使えます) $mail->Port = 587; // TCP ポート (TLS の場合 587) // メール本体 $mail->setFrom('○○@gmail.com', 'hazuki'); // 送信元メールアドレスと名前 $mail->addAddress($email, mb_encode_mimeheader($name, 'ISO-2022-JP')); // 送信先メールアドレスと名前 // 件名 $mail->Body = mb_convert_encoding($name, "JIS","UTF-8"); // 本文 $mail->Body = mb_convert_encoding($furigana, "JIS","UTF-8"); // 本文 // 送信 $mail->send(); echo '送信済み'; } catch (Exception $e) { echo "送信失敗: {$mail->ErrorInfo}"; } ?> <!DOCTYPE html> <html> <head> <meta charset ="utf-8"> </head> <body> </body> </html>

    • ベストアンサー
    • PHP
  • ruby-cgi メールは受信できるのですが文字化けしてしまいます。

    下記のように記載しましたが、日本語のメール本文が文字化けしてしまいます。 nkfあたりが怪しいと思うのですが、お手上げです。 よろしくお願いします。 #!/usr/bin/ruby -Ke require 'nkf' require 'cgi' require 'net/smtp' def sendmail(server, subject, body, sender, recipient) mail = '' # メールヘッダを作る mail << 'To: ' + recipient + "\n" mail << 'From: ' + sender + "\n" mail << 'Subject: ' + subject + "\n" mail << 'Date: ' + Time.now.strftime('%a, %d %b %Y %H:%M:%S %z') + "\n" mail << "\n" # メールの本文 mail << body # 送信! Net::SMTP.start(server, 25) {|smtp| smtp.send_mail(mail, sender, recipient) } end cgi = CGI.new output = '' output << "ああ" + ":\n" output << ' ' + "いいい".gsub(/\n/, "\n ") + "\n" NKF.nkf('-j -m0', output) sendmail('mailserver@**.co.jp', 'cgi sendmail', output, 'from@mail.co.jp', 'to@mail.co.jp'){|body| NKF.nkf('-e -m0', body) } cgi.out('type' => 'text/plain') { output }

    • ベストアンサー
    • CGI
  • メールの文字化け

    メールフォームを作成したのですが受信したメールが文字化けしてしまいます 色々調べたのですが初心者なので解りません どうかよろしくお願いします <?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); $message = "\n名前:" . $_POST["name"] ."\n住所:" . $_POST["address"]."\nビルアパートなど:" . $_POST["address02"]. "\n電話番号:" . $_POST["telphone"]. "\nメールアドレス:" . $_POST["mail"]. "\nお問い合わせ内容:" . $_POST["message"]; if (!mb_send_mail("aa@aa.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?>

    • 締切済み
    • PHP
  • メールを受信で文字化け

    phpでメール送信フォームを作成しています。 ローカルでは上手くいきますが、レンタルサーバーでは受信メールが文字化けをしてしまいます。 いろいろ試しましたが、さっぱりわかりません。 どなたか助けて下さい。 サイトはUTF-8を使用しています。 input用ファイルから下記のsend用ファイルにactionしています。 Content-Typeの指定方法がよくないのでしょうか? <?php ini_set('SMTP','mail.glbl-srv.net'); ini_set('smtp_port','587'); $ini = parse_ini_file('mail.ini'); $headers = <<<HEAD From: {$_POST['from']} Return-Path: {$_POST['from']} //Content-Type: text/html/plain;charset=ISO-2022-JP Content-Type: text/html/plain;charset=UTF-8 HEAD; //$body = "■■{$ini['subject']}■■\n\n"; $body = "■■{$_POST['title']}■■\n\n"; foreach ($_POST as $key => $value) { $body .= "[{$key}] {$value}\n"; } mb_send_mail($ini['mailto'], $ini['subject'].'('.$_POST['title'].')', $body, $headers); //mail($ini['mailto'], $ini['subject'].'('.$_POST['title'].')', $body, $headers); header("Location: ".$ini['dist']); ?>

    • ベストアンサー
    • PHP
  • メール送信時の文字化けについて

    お世話になります。 PHPでメール送信のフォームを作っているのですが 何故か、「あ」や「ア」が入力されると 文字化けされてしまいます。 $address = $_POST['address']; //送信先 $name = $_POST['name']; $mail = $_POST['mail']; //相手先 $title = $_POST['title'];   //タイトル $message = $_POST['message']; //本文 mb_language("Japanese"); mb_internal_encoding("JIS"); mb_send_mail($address, $title, $message, "From:$mail", "-f$mail") ソースはこんな感じですが何か根本的な問題とかが あるのでしょうか? 初心者みたいな質問で申し訳ありません。

    • 締切済み
    • PHP
  • 受信メールのsubjectが文字化けします。

    PHP5+Windowsを使用してWeb上からメールの送受信が行えるプログラムを作成しようとしています。 本文と送信元アドレスなどは、文字化けを起こすことなく表示されるのですが、subjectは全て”?”と表示されてしまいます。 文字化けせずに表示させるにはどうすればよいのでしょうか? ご教示よろしくお願いします。

    • 締切済み
    • PHP
  • メール送信で文字化け

    メール送信で件名が文字化けしてしまいます。 カテゴリ内には同様の質問もあるようですが、 解決できないので、投稿しました。 以下のようなコードです。 $to= "aa@aa.aa"; $from= "bb@bb.bb"; $subject= "メール送信テスト"; $headers= "From:$from"; $subject = i18n_mime_header_encode(i18n_convert($subject, "JIS")); $name= $_POST["name"]; $sub= $_POST["sub"]; $body= $_POST["body"]; $message="$name \n $sub \n $body \n"; if(mail($to, $subject, $message,$headers)){ echo "送信完了"; }else{ echo "送信エラー"; } ちなみに、 $subject= base64_encode($subject); とかもやってみたけど駄目でした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • メールフォームから送信すると文字化けします^^;

    海外のHPのテンプレサイトにてダウンロードしたテンプレート内のメールフォームで送信すると文字化けしてしまいます^^; 下記がsendmail.php内の中身なのですが、何が足りないでしょうか?^^; ご教授よろしくお願いします。 http://www.premiumfreebies.eu/previews/ProFolio/ <? //This php file receives the post vars of the contact page and sends it to a email address //Settings $email = 'メールアドレス'; $subject = '[NAME] HP form mail '; $name = $_POST['name']; $from = $_POST['email']; $message = $_POST['message']; mb_language("ja"); mb_internal_encoding("UTF-8"); //Set the headers and send the mail $subject = str_replace('[NAME]', $name, $subject); $headers = 'From: '.$name.' <'.$from.'>'; mail($email, $subject, $message, $headers); ?>

    • ベストアンサー
    • PHP
  • PHPで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);

    • ベストアンサー
    • PHP
  • メール文書の文字化けに困っています。

    下記のPHPを使ったメールフォームを作成しました。 送信は問題無く行うことができるのですが、送信先に受信されたメール文書について日本語が文字化けしてしまいます。 下記のソースをご覧頂き、原因がおわかりの方がおりましたらご教授頂けますと誠に幸いです。 宜しくお願いいたします。 <?php //create short variable names $name=utf8_decode($HTTP_POST_VARS['name']); $email=utf8_decode($HTTP_POST_VARS['email']); $subject=utf8_decode($HTTP_POST_VARS['subject']); $message=utf8_decode($HTTP_POST_VARS['message']); $name=trim($name); $email=trim($email); $subject=StripSlashes($subject); $message=StripSlashes($message); //modify the next line with your own email address $toaddress='test@test.domain'; mail($toaddress,$subject,$message,"From: $name <$email>"); //clear the variables $name=''; $email=''; $subject=''; $message=''; echo "response=passed"; ?>

    • 締切済み
    • PHP

専門家に質問してみよう