Webサイトの問い合わせフォームにPHPmailerを導入したのですが、返信のメールが文字化けしてしまいます。
いろいろと試しましたがうまくいかないので、お知恵を貸してください!
発生している問題・エラーメッセージ
送信される日本語が文字化けしています。
該当のソースコード
index.php
1<form action="mail.php" method="post"> 2 <input type="text" name="email" placeholder="email" value="<?php if(!empty($_POST['email'])) echo $_POST['email']; ?>"> 3 <input type="text" name="subject" placeholder="subject" value="<?php if(!empty($_POST['subject'])) echo $_POST['subject']; ?>"> 4 <textarea name="comment" cols="50" rows="10"><?php if(!empty($_POST['comment'])) echo $_POST['comment']; ?></textarea> 5 <input type="submit" value="SUBMIT"> 6</form>
mail.php
1<?php 2 3mb_language("ja"); 4mb_internal_encoding("UTF-8"); 5 6use PHPMailer\PHPMailer\PHPMailer; 7use PHPMailer\PHPMailer\SMTP; 8use PHPMailer\PHPMailer\Exception; 9 10require 'vendor/autoload.php'; 11 12if(!empty($_POST)){ 13 $msg = ''; 14 if(empty($_POST['email'])){ 15 $msg = 'Emial required'; 16 } 17 if(empty($_POST['subject'])){ 18 $msg = 'Subject required'; 19 } 20 if(empty($_POST['comment'])){ 21 $msg = 'Comment required'; 22 } 23 if(empty($msg)){ 24 $to = $_POST['email']; 25 $subject = mb_encode_mimeheader($_POST['subject']); 26 $comment = mb_convert_encoding($_POST['comment'], "JIS", "UTF=8"); 27 if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9?*[|]%'=~^\{\}/+!#&$._-])*@([a-zA-Z0-9_-])+.([a-zA-Z0-9._-]+)+$/", $to)){ 28 $msg = 'Please input correct Email'; 29 }else{ 30 $mail = new PHPMailer(true); 31 try { 32// $mail->SMTPDebug = SMTP::DEBUG_SERVER; 33 $mail->isSMTP(); 34 $mail->Host = 'example.jp'; 35 $mail->SMTPAuth = true; 36 $mail->Username = 'example.mixh.jp'; 37 $mail->Password = 'password'; 38 $mail->SMTPSecure = 'ssl'; 39 $mail->Port = 465; 40 41 $mail->setFrom('admin@email', 'something'); 42 $mail->addAddress($to); 43 $mail->addAddress('admin@email'); 44 $mail->addReplyTo('admin@email'); 45// $mail->addCC('cc@example.com'); 46// $mail->addBCC('bcc@example.com'); 47 48 $mail->CharSet='UTF-8'; 49 $mail->isHTML(false); 50 $mail->Subject = 'お問い合わせありがとうございます'; 51// $mail->Body = 'This is the HTML message body <b>in bold!</b>'; 52 $mail->Body = <<< EOM 53 54Your Email: 55$to 56 57Subject: 58$subject 59 60Comment: 61$comment 62 63.............................. 64 65.............................. 66 67EOM; 68 69 $mail->send(); 70 echo 'Message has been sent'; 71 } catch (Exception $e) { 72 echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; 73 } 74 75 } 76 } 77}
試したこと
①
mb_language("ja");
mb_internal_encoding("UTF-8");
上記をmail.phpの上部に追加
②
$mail->CharSet='UTF-8';
上記を追加
③
$subjet = ($_POST['subject'];から
$subject = mb_encode_mimeheader($_POST['subject']);に変更
$comment = ($_POST['comment'];から
$comment = mb_convert_encoding($_POST['comment'], "JIS", "UTF=8");に変更
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー