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

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

ただいまの
回答率

90.34%

  • PHP

    21286questions

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

  • PEAR

    144questions

    PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

Pear のMailパッケージ及びMail-MIMEパッケージを使って添付ファイル付きのメール送信が出来ません。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,191

KentaroOnoda

score 11

PHP初心者です。以前の質問内容を(PHPで添付ファイル付きのメールを送信する:詳しい内容は1つ前の質問をご覧頂けると幸いです)PEARのMail及びMail-MIMEパッケージを使ってメール処理部分を作成したのですが、メール送信ができません。パッケージのインストールやパスの設定などは上手くできたのですが、デバッグの際にメール送信の部分{send($recipients, $headers, $body)}でエラーになってしまうようです。原因に心当たりのある方がいらっしゃいましたら、ご教示頂けると幸いです。よろしくお願いします。

参考にしたサイトリンク内容

メール送信処理

require_once("Mail.php");
        require_once("Mail/mime.php");

        $params = array(
                "host" => "smtp.lolipop.jp",
                "port" => 465,
                "auth" => true,
                "username" => "○○○○.lolipop.jp",
                "password" => "△△△△"
        );

        $mailObject = Mail::factory("smtp",$params);

        $recipients = "kentaro-onoda@lifeone.or.jp";

        //メールの本文を作成
        $honbunName = "氏名:" . $name . "\n";
        $honbunFurigana = "フリガナ:" . $furigana . "\n";
        $honbunCompany = "会社名:" . $company . "\n";
        $honbunZipcode = "郵便番号:〒". $zipcode1 . "-" . $zipcode2 . "\n";
        $honbunAddress = "住所:" . $prefecture . $cityName . $building . "\n";
        $honbunMailAddress = "メールアドレス:" . $mailaddress1 . "\n";
        $honbunPhoneNumber = "電話番号:" . $phoneNumber1 . "-" . $phoneNumber2 . "-" . $phoneNumber3 . "\n";
        $honbunContent = "問い合わせ内容:" . $content;

        $honbun = $honbunName . $honbunFurigana . $honbunCompany . $honbunZipcode . $honbunAddress . $honbunMailAddress. $honbunPhoneNumber .$honbunContent;

        $body = $honbun;

        $mimeObject = new Mail_Mime("¥n");
        $mimeObject -> setTxtBody($body);


        //各項目をShift-JISに変換
        //件名
        $title = mb_encode_mimeheader(mb_convert_encoding("タイトル", "JIS", "utf-8"),"JIS");

        //送信先アドレス
        $to = mb_convert_encoding("○○○○○@××××.or.jp", "JIS", "utf-8");

        if(isset($_POST['fname'])){
            //添付ファイルがある場合
            $filepath = $_POST['filepath'];

            $mimeObject -> addAttachment($filepath, "application/pdf");


        }//if

        $bodyParam = array(
                "head_charset" => "ISO-2022-JP",
                "text_charset" => "ISO-2022-JP"
        );

        $body = $mimeObject -> get($bodyParam);


        $addHeaders = array(
                "To" => $to,
                "From" => $mailaddress1,
                "Subject" => $title
        );

        $headers = $mimeObject -> headers($addHeaders);

        $mailObject -> send($recipients, $headers, $body);

        //メール送信が完了した場合
        $_SESSION['error' . $i] = "お問い合わせ内容を送信しました。";
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

(以下、推測なのですが・・・)

PEARのMail が、SMTPS(SMTP over SSL)通信に対応できていない気がします。
(もしくは、そのようなオプションが存在するのかも)

  • lolipop側は、SMTPS(ポート 465)で通信しようとしている。
  • PEAR のメールは、ポート465 に接続して、SMTP でメールを送信しようとしている。

両者のプロトコルが合わないので、コケル。


(追記:2017-03-15 00:45)

PEARのMail で、SMTPS(ポート465)を利用するには、"host"で ssl:// を付ければ良さそうです。

$params = array(
       "host" => "ssl://smtp.lolipop.jp",
       "port" => 465,
       "auth" => true,
       "username" => "○○○○.lolipop.jp",
       "password" => "△△△△"
);

Windows 上で動かしているのであれば、php.ini で OpenSSL を有効にしておく。

extension=php_openssl.dll

(参考)
http://stackoverflow.com/questions/712392/send-email-using-the-gmail-smtp-server-from-a-php-page

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/14 19:09

    再度ご回答頂きありがとうございます。エラー内容を調べたところ、Failed to connect to smtp.lolipop.jp:465 [SMTP: Invalid response code received from server (code: -1, response: )]'と出ましたので、SMTPS通信に対応できていないのが原因なのかと思います。ポート番号を変えたりしていろいろ対策を自分なりに考えて実践してみたのですが、どうしても突破口が開けません。もし何か思い当たることがありましたらご指摘頂けると幸いです。よろしくお願いします。

    キャンセル

  • 2017/03/15 18:53

    わざわざ調べて頂きありがとうございます。ご指摘頂いたとおりホスト名のところを"ssl://smtp.lolipop.jp"と記述したところメールを送ることができました。ただ送信したメールにファイルが添付されておらず、改行させるつもり入力した"¥n"が文字化けしてしまいました。自分でデバックをしたところ $mimeObject -> addAttachment($filepath, "application/pdf")のところで「PEAR_Error:File not found: ../○○/△△△.pdf」と表示されてしまいます。どうやらファイルが見つからないのが原因のようなのです。何度も申し訳ございませんが、この2点につきましても原因に何か心当たりがありましたら、

    キャンセル

0

$ret =  $mailObject->send($recipients, $headers, $body);

として、$retにエラー内容が入ってくると思うので
var_dump($ret);
してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/14 19:02

    ご回答頂きありがとうございます。エラーの内容を調べたところ、'Failed to connect to smtp.lolipop.jp:465 [SMTP: Invalid response code received from server (code: -1, response: )]'と出たのでポート465でのメール送信が出来ていないのが原因なのかなと思いますが、ただ対策が分からず悪戦苦闘している状況です。もし何か対策として思い当たることがありましたら、ご教示頂けると幸いです。よろしくお願いします。

    キャンセル

  • 2017/03/15 10:20

    既に試しているかもしれませんが、ポート587にするとどんなエラーが出ますか?

    キャンセル

  • 2017/03/15 18:42

    ポート587にすると、「'Failed to connect to ssl://smtp.lolipop.jp:587 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://smtp.lolipop.jp:587 (Unknown error) (code: -1, response: )]' (length=179)」というエラーが出てしまいました。どうやら原因はホスト名のところを"ssl://smtp.lolipop.jp"と記述しないといけなかったようです。

    キャンセル

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

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

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

  • PHP

    21286questions

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

  • PEAR

    144questions

    PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

  • トップ
  • PHPに関する質問
  • Pear のMailパッケージ及びMail-MIMEパッケージを使って添付ファイル付きのメール送信が出来ません。