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

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

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

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

CentOS

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

PHP

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

Postfix

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

Q&A

解決済

2回答

1909閲覧

PHPからメールを送信

ryohasegawa

総合スコア437

Dovecot

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

CentOS

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

PHP

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

Postfix

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

0グッド

1クリップ

投稿2018/07/19 10:16

編集2018/07/20 12:53

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

php

1<?php 2 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6require(dirname(__FILE__)."/../vendor/autoload.php"); 7 8echo "メールを送信"; 9 10$to = '*******@yahoo.co.jp'; 11$subject = 'title'; 12$message = 'body'; 13$headers = 'From:'.'*******@gmail.com' . "\r\n"; 14 15$send_mail = mail($to, $subject, $message, $headers); 16 17if ($send_mail) { 18 echo "ok"; 19} else { 20 echo "no"; 21} 22?>

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

追記

text

1var/ 2 |-www/ 3 |-html 4 | |-index.php 5 |-vendor 6 |-autoload.php 7 |-composer 8 |-phpmailer 9

上の配置で、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を同じ場所に配置しないと行けないと回答を頂いたので、配置を以下のように変更しました。

text

1var/ 2 |-www/ 3 |-html 4 |-index.php 5   |-vendor 6 |-autoload.php 7 |-composer 8 | |- ...... 9 |-phpmailer 10 |- ...... 11

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

1<?php 2 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6use PHPMailer\PHPMailer\PHPMailer; 7use PHPMailer\PHPMailer\Exception; 8 9//require(dirname(__FILE__)."/../vendor/autoload.php"); 10//require(dirname(__FILE__)."/vendor/autoload.php"); 11require 'vendor/autoload.php'; 12echo "メールを送信"; 13 14$to = "*******@yahoo.co.jp"; //宛先 15$subject = "メールの件名"; //件名 16$body = "メールの本文です。"; //本文 17$from = "*******@gmail.com"; //差出人 18$fromname = "送信者"; //差し出し人名 19 20$mail = new PHPMailer(); 21$mail->CharSet = "iso-2022-jp"; 22$mail->Encoding = "7bit"; 23 24$mail->IsSMTP(); //「SMTPサーバーを使うよ」設定 25$mail->SMTPAuth = TRUE; //「SMTP認証を使うよ」設定 26$mail->Host = 'send.com:25'; // SMTPサーバーアドレス:ポート番号 27$mail->Username = '*******@gmail.com'; // SMTP認証用のユーザーID 28$mail->Password = 'pass'; // SMTP認証用のパスワード 29 30$mail->AddAddress($to); 31$mail->From = $from; 32$mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","UTF-8")); 33$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); 34$mail->Body = mb_convert_encoding($body,"JIS","UTF-8"); 35 36//メールを送信 37$mail->Send(); 38?>

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

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

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

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

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

ryohasegawa

2018/07/19 11:15 編集

修正しました。
guest

回答2

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

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

ryohasegawa

2018/07/19 10:19

ありがとうございます。 読んできます!
退会済みユーザー

退会済みユーザー

2018/07/19 10:38

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

2018/07/19 11:23

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

2018/07/19 11:25

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

退会済みユーザー

2018/07/19 11:35

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

2018/07/19 11:42

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

退会済みユーザー

2018/07/19 11:43 編集

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

2018/07/19 11:51

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

退会済みユーザー

2018/07/19 11:52

頑張ってください
退会済みユーザー

退会済みユーザー

2018/07/19 11:52

頑張ってください
ryohasegawa

2018/07/20 08:30

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

退会済みユーザー

2018/07/20 08:34 編集

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

退会済みユーザー

2018/07/20 08:37

vendorどこ行った?
ryohasegawa

2018/07/20 08:39

訂正しました。
退会済みユーザー

退会済みユーザー

2018/07/20 08:42

composer の使い方が間違っている。 // ドキュメントルートに移ってから cd /var/www/html composer require ... そうすると、index.php と同じディレクトリに vendor ができる
ryohasegawa

2018/07/20 08:47

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

退会済みユーザー

2018/07/20 08:47

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

2018/07/20 11:38 編集

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

0

自己解決

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

投稿2018/07/20 12:58

ryohasegawa

総合スコア437

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問