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

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

ただいまの
回答率

90.04%

PHPからメールを送信

解決済

回答 2

投稿 編集

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

ryohasegawa

score 119

前回の続きです。
実行すると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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • m.ts10806

    2018/07/19 19:47

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

    キャンセル

  • ryohasegawa

    2018/07/19 20:15 編集

    修正しました。

    キャンセル

回答 2

+4

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 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解決した方法

-3

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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