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

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

ただいまの
回答率

90.33%

  • PHP

    21368questions

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

  • CentOS

    2833questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Postfix

    276questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

  • Dovecot

    70questions

    Dovecotとは、POPやIMAPサーバーを提供するMDA(メール配送エージェント)の一つです。

PHPからメールを送信

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 339

ryohasegawa

score 116

前回の続きです。
実行するとokという文字が表示されるところまで行きました。
ですが、メールが届きません。
エラーは何も表示されていないので、エラーは発生しいないとおもいます。

<?php

ini_set('display_errors', true);
error_reporting(E_ALL);

require(dirname(__FILE__)."/../vendor/autoload.php");

echo "メールを送信";

$to      = '*******@yahoo.co.jp';
$subject = 'title';
$message = 'body';
$headers = 'From:'.'*******@gmail.com' . "\r\n";

$send_mail = mail($to, $subject, $message, $headers);

if ($send_mail) {
  echo "ok";
} else {
  echo "no";
}
?>

何処をどうすればよいのかが全くわかりません。
指定すべきものを指定していなかったり、するところがあれば教えて下さい。

 追記

var/
 |-www/
    |-html
    |  |-index.php
    |-vendor
        |-autoload.php
        |-composer
        |-phpmailer

上の配置で、index.phpへrequire(dirname(__FILE__)."/../vendor/autoload.php");と記述しautoload.phpを呼び出した結果以下のエラーが発生しました。

Fatal error: Uncaught Error: Class 'PHPMailer' not found in /var/www/html/index.php:17 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 17


$mail = new PHPMailer();でPHPMailerクラスが見つからないと言われています。

Kosuke_Shibuyaさんから、index.phpとvendorを同じ場所に配置しないと行けないと回答を頂いたので、配置を以下のように変更しました。

var/
 |-www/
    |-html
       |-index.php
      |-vendor
          |-autoload.php
          |-composer
          |  |- ......
          |-phpmailer
             |- ......


index.phpでの呼び出しも変更しました。
require(dirname(FILE)."/../vendor/autoload.php");

require(dirname(FILE)."/autoload.php");
ですが、エラー内容は変わらず、

Fatal error: Uncaught Error: Class 'PHPMailer' not found in /var/www/html/index.php:17 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 17


と言われています。

現在のソースは以下のようになってます。

<?php

ini_set('display_errors', true);
error_reporting(E_ALL);

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//require(dirname(__FILE__)."/../vendor/autoload.php");
//require(dirname(__FILE__)."/vendor/autoload.php");
require 'vendor/autoload.php';
echo "メールを送信";

$to = "*******@yahoo.co.jp";      //宛先
$subject = "メールの件名";         //件名
$body = "メールの本文です。";      //本文
$from = "*******@gmail.com";      //差出人
$fromname = "送信者";      //差し出し人名

$mail = new PHPMailer();
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";

$mail->IsSMTP();               //「SMTPサーバーを使うよ」設定
$mail->SMTPAuth = TRUE;        //「SMTP認証を使うよ」設定
$mail->Host = 'send.com:25';   // SMTPサーバーアドレス:ポート番号
$mail->Username = '*******@gmail.com';      // SMTP認証用のユーザーID
$mail->Password = 'pass';  // SMTP認証用のパスワード

$mail->AddAddress($to);
$mail->From = $from;
$mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8"));
$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8"));
$mail->Body = mb_convert_encoding($body,"JIS","UTF-8");

//メールを送信
$mail->Send();
?>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mts10806

    2018/07/19 19:47

    エラーが発生しないはずがないコードです。 https://paiza.io/ja/projects/new?locale=ja-jp ここに提示されたコードそのまま貼ってみてください。実行するまでもなくエラーが通知されます。

    キャンセル

  • ryohasegawa

    2018/07/19 20:15 編集

    修正しました。

    キャンセル

回答 2

+4

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/19 19:19

    ありがとうございます。
    読んできます!

    キャンセル

  • 2018/07/19 19:38

    記事以前の問題かと^^;
    シンタックスハイライトがすでにおかしい。

    キャンセル

  • 2018/07/19 20:23

    前のte2jiさんの回答は読んでもらいたかったですね。
    このまま突き進んでもいいことなさそう。

    キャンセル

  • 2018/07/19 20:25

    $headers = 'From:'.'*******@gmail.com' . "\r\n";
    は修正しました。
    サイトからコピペして、自分のメールアドレスへ書き換える際に消してしまったようです。

    キャンセル

  • 2018/07/19 20:35

    > ryohasegawaさん
    紹介した記事の最初の3分の1しか読んでいないの?

    キャンセル

  • 2018/07/19 20:42

    最後まで読みました。
    mb_send_mail を使うより、PHPMailerを使ったほうが正確に届くという事でしょうか?

    キャンセル

  • 2018/07/19 20:42 編集

    読んでも理解しようとしていないということですか。
    なぜ、PHPMailerを使うべきなのかも書いてあるというのに。

    キャンセル

  • 2018/07/19 20:51

    「正規の送信サーバーを中継しているので、メールの到達の可能性が高い」
    という結果ですよね?
    現在PHPMailerをGitHubからダウンロードしてこれをどうするか調べています。

    キャンセル

  • 2018/07/19 20:52

    頑張ってください

    キャンセル

  • 2018/07/19 20:52

    頑張ってください

    キャンセル

  • 2018/07/20 17:30

    PHPMailerをComposerでインストールし、コードでrequire("../vendor/autoload.php");して呼び出しているんですが、$mail = new PHPMailer(true);でPHPMailerが見つからないと言われています。
    ファイルを見ると、PHPMailerは確かにインストールされています。
    autoload.phpは確かに呼ばれています。
    autoload.phpがPHPMailerを読んでいないと推測しています・・・

    キャンセル

  • 2018/07/20 17:32 編集

    パスが間違っているんでしょうよ
    1年以上もPHPやってて、相対パスの見方もわからんとかは、いい加減ナシの方向でお願いします。

    キャンセル

  • 2018/07/20 17:37

    vendorどこ行った?

    キャンセル

  • 2018/07/20 17:39

    訂正しました。

    キャンセル

  • 2018/07/20 17:42

    composer の使い方が間違っている。

    // ドキュメントルートに移ってから
    cd /var/www/html

    composer require ...

    そうすると、index.php と同じディレクトリに vendor ができる

    キャンセル

  • 2018/07/20 17:47

    composer の認識が間違っていたかもしれないです。
    自分が現在、認識としてはvar/www 内にpublic(html) とprivateに分けて、public(html)をドキュメントルートにして、privateには、関数や設定など(エンドユーザーがアクセスする必要ないファイル)をまとめファイルを格納していました。
    今回のcomposer系も直接ユーザーがアクセスする必要のないファイルなので、privateに格納したわけなのですが、composer系もpublic(html)に配置しないと行けないものなのですか?

    キャンセル

  • 2018/07/20 17:47

    試してみてから質問してね

    キャンセル

  • 2018/07/20 19:23 編集

    時間かかってすいません。
    試してみました。結果を追記しました。

    キャンセル

check解決した方法

-1

サンプルソースをPHPMailerの使い方・設定に書き換えて実行してみるとメールを送信することができました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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

  • PHP

    21368questions

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

  • CentOS

    2833questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Postfix

    276questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

  • Dovecot

    70questions

    Dovecotとは、POPやIMAPサーバーを提供するMDA(メール配送エージェント)の一つです。