質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • PHP

    19162questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPからのメールで文字化けする

解決済

回答 3

投稿

  • 評価
  • クリップ 2
  • VIEW 371

yas_usa

score 5

phpで一斉メールを送ろうと思っています。
お名前コムの共有サーバーを使っています、下記テストで30人ほどに一斉送信を繰り返したところ
一度負荷がかかり過ぎという事で制限をされた際に、
それに気が付かずエラーかと思っていじっっていたらおかしくなりました・・・。

現状で送るとガラケーで本文が文字化けします。
(一度はここまではできていました)
また、ブルーメールというAndroidのアプリでは件名が文字化けします。
この問題の解決で、いろいろいじりすぎて何が何だかわからなくなってしまいました。
どなたかご教授頂けると幸いです。

<?php 

mb_language('ja');
mb_internal_encoding("UTF-8");

// 本文
$message = '
<html>
<head>
<title>お知らせ一覧</title>
</head>
<body>
<p>各位<br>
事務局です、一斉送信にてメールをお送りしています。</p>
<p>研修サイトのお知らせが更新されました。<br>
事務局からの大切なお知らせですので確認してください。</p>
<p><a href="https://" title="お知らせ一覧">お知らせ一覧</a></p>
</body>
</html>
';

$message = wordwrap($message, 70, "\r\n");

//headerを設定
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: text/html; charset="ISO-2022-JP"';

// 追加のヘッダ
$from = mb_encode_mimeheader("送信者名","iso-2022-jp")." <AAAAAAA@AAAAA.com>";
$headers[] .= "From: ".$from." \r\n";

// 表題
$subject = 'お知らせ更新';
$subject = mb_convert_encoding($subject,'utf-8',mb_detect_encoding($subject));
$subject = mb_encode_mimeheader($subject,'iso-2022-jp');

// 送信する
mail($to, $subject, $message, implode("\r\n", $headers));


?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yas_usa

    2018/05/10 09:06

    お名前コムは同時に30アドレス以上だと制限されて、解除は電話でお願いをして解除してもらえましたが、2回目は解除できませんとの事でした。予算の関係でこの共有サーバーにされているのでどうにもならないのですが、考えてみます。ありがとうございました!

    キャンセル

  • kei344

    2018/05/13 20:17

    まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。

    キャンセル

  • yas_usa

    2018/05/13 20:24

    ご指摘ありがとうございます。解決済みにさせていただきました。

    キャンセル

回答 3

+3

一斉送信は初心者にはハードルが高いです。
・ドメインの設定
・バウンスの処理
程度の知識がないと、すぐにドメインごとスパム扱いされてしまいます。

メール配信サービスはいくつもあるので、そちらを検討してはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/10 06:46

    上記の物はお知らせを作成して、作成出来たら自動で送信というものになるのですが、ご回答いただいたメール配信サービスもそう言った用途には対応しているのでしょうか

    キャンセル

  • 2018/05/10 06:59

    メール配信サービスが対応しているというより、要件に合致した配信サービスを選定する。とういのが正しいです。

    メール配信サービスというくくりだけで考えると
    ・配信先リストに基づいて、メールする
    ・メール本文を作成できる
    という2機能が最小条件となるため、それ以外の付加サービスを比較することになります。

    API を用意しているサービスも多いので、今記述のある要件を満たすサービスはいくつもあるかと。

    記述のない要件も含めて検討してみるとイイです。

    参考:
    メール配信/比較 でググった最初のリンク
    https://boxil.jp/mag/a67/

    キャンセル

  • 2018/05/10 07:03

    ありがとうございます。
    一斉送信する相手がかなり流動的なので毎回個別の変更が煩わしいという事での対応だったのですが、共有サーバーでは厳しいという点などを含めて検討させていただきます!

    キャンセル

checkベストアンサー

+1

実際に動かしてみた。
元のソースだと本文がUTF-8なのに
ヘッダーでISO-2022-JP指定してあるから文字化けしてる。

それと、特定のメーラーで件名が文字化けしないように、
対策を追加してある。

<?php 

mb_language('ja');
mb_internal_encoding("UTF-8");

// 本文
$message = '
<html>
<head>
<title>お知らせ一覧</title>
</head>
<body>
<p>各位<br>
事務局です、一斉送信にてメールをお送りしています。</p>
<p>研修サイトのお知らせが更新されました。<br>
事務局からの大切なお知らせですので確認してください。</p>
<p><a href="https://" title="お知らせ一覧">お知らせ一覧</a></p>
</body>
</html>
';

$message = wordwrap($message, 70, "\r\n");
$message = mb_convert_encoding($message, "JIS");

//headerを設定
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: text/html; charset="ISO-2022-JP"';

// 追加のヘッダ
$from = mb_encode_mimeheader("送信者名","iso-2022-jp")." <info@example.com>";
$headers[] .= "From: ".$from." \r\n";

// 表題
$subject = 'お知らせ更新';
$subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,"JIS","UTF-8"))."?=";

// 送信する
mail($to, $subject, $message, implode("\r\n", $headers));


?>

あと、メール送信するサーバーの仕様として、メール送信頻度を監視している可能性と、
DKIMやSPFを考慮した送信の仕組みかどうか、という要素もあるので、
それらは別途調べた上で改めて質問に起こすと良いでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 10:14

    ご回答ありがとうございます。

    PHPを始めてまだ時間が浅く知識が足りないので、かなりいろいろ調べての投稿でした。
    このサイトは見てましたが、うまくいきませんでした。

    キャンセル

  • 2018/05/08 10:26 編集

    《うまくいきませんでした》具体的にどうぞ。
    ほか、参考にしたサイトや情報も質問内に追記してほしいものです。

    キャンセル

  • 2018/05/08 13:34

    どこが参考になったのか見つからなくなってしまったものですみません。

    キャンセル

  • 2018/05/08 13:38

    まるっと書き換えた回答に示したコードで、自分の観測範囲内では文字化けは起きていない模様。
    (WindowsのMozilla Thunderbird, iPhone標準メール, AndroidのK-@ mail)

    キャンセル

  • 2018/05/10 06:49

    hotmail等でも試してみましたが文字化けをするのはガラケー(いじる前は正常に表示されていました)とアンドロイドのblue mailというアプリで送信者名が文字化けしていました。

    m6uさんの仰られる通りさらに調べてみます。

    キャンセル

0

いろいろ試行錯誤した結果、下記でガラケーとスマホアプリで文字化けもせず出力する事が出来ました。

アドバイスをいただけました皆様ありがとうございました。

また、お名前comはメール送信が1プロセスで30件までとひどかったので、エックスサーバーに移行することにしました。
一時間1500件、一日15000件までOKだそうです。

mb_language('ja');
mb_internal_encoding("UTF-8");

$formname = '送信者名';

$sql = "SELECT * FROM test ORDER BY id";
$result = mysqli_query($con, $sql) or die("データ出力エラー");
$i=1;
$headers[] = 'To: メアド';
mail($to, $subject, $message, implode("\r\n", $headers));
//取り出したデータを表示する
while($row = mysqli_fetch_array($result,MYSQL_ASSOC)){
// 送信する
//headerを設定
$headers = NULL;
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: text/html; charset="utf-8"';

// 追加のヘッダ
$headers[] = 'From: '.mb_convert_encoding($formname,'utf-8',mb_detect_encoding($formname,"auto")).' <メアド>';

// 表題
$subject = 'お知らせ名';
$subject = mb_convert_encoding($subject,'utf-8',mb_detect_encoding($subject,"auto"));
$subject = mb_encode_mimeheader($subject,'iso-2022-jp');

// 本文
$message = file_get_contents('message.php');
$message = mb_convert_encoding($message,'utf-8',mb_detect_encoding($message,"auto"));
$headers[] = "To: ".$row['account'];
mail($to, $subject, $message, implode("\r\n", $headers));
echo $i."通目送信 ".$row['account']." ";
    sleep(1.0);
    $i++;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    添付ファイル名が文字化けします。

    メールに添付ファイルをつけて配信したいのですが 届いたメールの添付ファイル名が文字化けしています。 どうすれば文字化けが直るのでしょうか? よろしくお願いいたします。

  • 解決済

    「はしご高」を含むメールを送信したい

    PHP5.6から、メール本文に「はしご高」や「たつ崎」などを含む メールを送信したいと考えています。 Gmailなどからメールを送信し、ヘッダーを確認すると以下のようになっ

  • 解決済

    PDFファイルを添付したメールを送信したい

    タイトル通りです。 昔csvを添付したメール送信をやった経験があって、今回pdfの添付もしようと思っていますが、添付がうまく行かないです。 エラーも出て来てないため、どこが

  • 解決済

    PHPメール送信でPDFを添付しましたが、メール本文が表示しません。

    sendmailでPDFを添付しました。 それで送られたメールを確認すると、添付ファイル以外何も入ってません、メール本文も出てませんでした。 本文を出すにはどうしたらいいで

  • 解決済

    mb_convert_encoding で文字エンコーディングを変換したときに、メーラー側ではその一...

    現在、メールフォームの文字コードについて勉強しております。 入力、確認、送信と画面を遷移するメールフォームを作成しました。 送信画面のコードを末尾に記載致します。

  • 解決済

    php7での仕様変更?

    先日このサイトでお聞きしたことの派生なのですが、メールをトリガーとしてphpを起動させるという方法についてお教えください。 メールをトリガーとしてphpを起動させる方法については当

  • 解決済

    PHPでの添付メール送信&文字化け回避について

    PHPを利用してメールを送りたくて試行錯誤しています。 ネットに情報はたくさんありましたが、特に文字化けに関することはサイトによって言っていることが違い、どれが正しいのか困惑してい

  • 解決済

    php pear mail 文字化け

    php pear mail を用いてメール送信テストを行っております。 その際に、日本語メールにてメールをSMTP経由で送信をしております。 その中で、メール送信はできており、メー

同じタグがついた質問を見る

  • PHP

    19162questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。