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

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

新規登録して質問してみよう
ただいま回答率
85.48%
IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

解決済

1回答

897閲覧

メールを取得する方法

s.20

総合スコア10

IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

0クリップ

投稿2023/03/27 10:08

編集2023/03/27 10:22

実現したいこと

  • PHPでImapを使ってメールを取得

前提

メールの受信ボックス(メーラー)を作っています。
ですが、プログラム初心者で、htmlメールを表示できません。

発生している問題・エラーメッセージ

  • メールが英語とかに変わってしまう。

元のメッセージ

Mail

1【差出人】Name 2【件名】テスト 3【本文】**html**メールです。

htmlここは太字です。

表示されるメッセージ

Message

1Subject: =?UTF-8?B?44OG44K544OI?= From: Name Date: Mon, 27 Mar 2023 19:17:01 +0900 Message ID: HTML Body: PGRpdiBkaXI9Imx0ciI+PGI+aHRtbDwvYj7jg6Hjg7zjg6vjgafjgZnjgII8L2Rpdj4NCg==

該当のソースコード

php

1<?php 2// 文字コードをUTF-8に設定する 3mb_language('ja'); 4mb_internal_encoding('UTF-8'); 5 6// メールサーバーの設定 7$hostname = '{[Server]:993/imap/ssl}INBOX'; 8$username = 'user'; 9$password = 'pw'; 10 11// 接続を確立する 12$inbox = imap_open($hostname, $username, $password) or die('Cannot connect to server: ' . imap_last_error()); 13 14// メールボックスからメールの情報を取得 15$emails = imap_search($inbox, 'ALL'); 16 17if ($emails) { 18 // メールを新しいものから古いものの順に並べる 19 rsort($emails); 20 21 // 各メールについて情報を表示 22 foreach ($emails as $email_number) { 23 // 概要を取得 24 $overview = imap_fetch_overview($inbox, $email_number, 0); 25 echo "Subject: " . mb_convert_encoding($overview[0]->subject, 'UTF-8', 'auto') . "\n"; 26 echo "From: " . mb_convert_encoding($overview[0]->from, 'UTF-8', 'auto') . "\n"; 27 echo "Date: " . $overview[0]->date . "\n"; 28 echo "Message ID: " . $overview[0]->message_id . "\n"; 29 30 // メールの構造を取得 31 $structure = imap_fetchstructure($inbox, $email_number); 32 33 // HTMLパートを探す 34 $html_part_id = find_html_part_id($structure); 35 36 if ($html_part_id) { 37 // HTMLパートを取得 38 $html = imap_fetchbody($inbox, $email_number, $html_part_id); 39 echo "HTML Body: \n" . mb_convert_encoding($html, 'UTF-8', 'auto') . "\n"; 40 } else { 41 echo "No HTML part found.\n"; 42 } 43 44 echo "------------------------------------\n"; 45 } 46} 47 48// 接続を閉じる 49imap_close($inbox); 50 51// メールの構造からHTMLパートを見つける関数 52function find_html_part_id($structure, $part_id = null) { 53 if ($structure->type == 1) { // multipart 54 foreach ($structure->parts as $index => $subpart) { 55 $prefix = $part_id ? $part_id . '.' : ''; 56 $subpart_id = $prefix . ($index + 1); 57 $result = find_html_part_id($subpart, $subpart_id); 58 59 if ($result) { 60 return $result; 61 } 62 } 63 } elseif ($structure->type == 2) { // message/rfc822 64 return find_html_part_id($structure->parts[0], $part_id); 65 } else { 66 if (strtolower($structure-> 67subtype) == 'html') { 68return $part_id ?: '1'; 69} 70} 71return null; 72} 73?>

補足情報(FW/ツールのバージョンなど)

php74

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pippi19

2023/03/27 10:09

>メールが英語とかに変わってしまう。 具体的にどんなメールがどのような英語表示になってしまうのか記載してください。
s.20

2023/03/27 10:22

コメントありがとうございます。 エラーメッセージの箇所に追加いたし増したのでご確認をお願いします
guest

回答1

0

ベストアンサー

メールが英語とかに変わってしまう。

変わってしまうのではなく、それが正しい内容です。
メールサーバは日本語を扱えませんので、そのようにエンコードされています。

なので、人間が可読できるようにするにはデコード処理が必要です。
ヒントとしては、下記のサイトに本文であるこちらを入れてみてください。

PGRpdiBkaXI9Imx0ciI+PGI+aHRtbDwvYj7jg6Hjg7zjg6vjgafjgZnjgII8L2Rpdj4NCg==


https://develop.tools/base64-encoding/

投稿2023/03/27 10:41

編集2023/03/27 10:53
pippi19

総合スコア679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.20

2023/03/27 11:22

回答ありがとうございます。 base64でデコードしたのですが、今度は以下のように表示されてしまいます。 (povo2.0の確認コードの件名です。) J��y�n��*4�Jh��7�Ou717�`t6�7�pw59_9�:�Q7�P��1<�B6q7�pB7��7�ov5��;`@��17�_5A7�_y5�From: "povo.jp"
s.20

2023/03/27 11:48

お世話になっております。 間違えてURLでコードしていました。 申し訳ありません。 無事にできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問