PHPでメールを送信するにはどうすればよいですか?


71

taskselを使用してUbuntu 11.04、LAMPをインストールしました。

PHP mail()が機能しないことがわかりました。

私はそれか何かを有効にする必要があると思いますか?それ、どうやったら出来るの?


これは、Gmailから簡単に送信できます。kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php
Kvvaradha

回答:


51

phpのメールマニュアルから:

必要条件

メール機能を使用できるようにするには、PHPにインストール済みの稼働中の電子メールシステムが必要です。使用するプログラムは、php.iniファイルの構成設定によって定義されます。

つまり、何らかのメールサーバーをインストールし、それを使用するようにphpを構成する必要があります。通常、このメールサーバーはUbuntuの接尾辞です。ただし、コーディングしているPHP側が最終的にホスティングサービス側(xmissionなど)に保存される場合、メールサーバーはほとんどの場合既にそこにインストールされています。その場合は、ローカルではなくオンラインでサイトをテストするだけです。

独自のシステムでテストする必要がある場合、または独自のホームサーバーでホストする必要がある場合は、次の手順に進みます。

Postfixインストール

インストール:postfix 後置記号をインストールする / sudo apt-get install postfix プロセス中に、どのモードでpostfixをインストールするか尋ねられます。次の4つのモードがあります。

  • インターネット:独自のメールサーバー。
  • サテライト:メールの送受信には、外部メールプロバイダー(Googleなど)が使用されます。サーバーはメールを受信しません。
  • Smarthost:2つの間の混合。メールはローカルに保存されますが、外部メールプロバイダーを介して送信されます。
  • ローカルのみ:関係ありません。それはシステムインターンメールサーバーです。システム上のユーザーからユーザーへのメールのみを送信できます。

残りのインストールオプションは、この一般的な構成の選択に依存します。

ほとんどの場合、サテライトインストールを選択します。つまり、メールは外部プロバイダーを使用して送信されます。smtp-server(送信メールサーバー)として、プロバイダーのsmtpを指定する必要があります。残りのオプションは自明です。

インストール後の構成

ほとんどのsmtpサーバーでは、メールを送信するためにパスワード認証が必要です。したがって、postfixはそのパスワードを知る必要があります。また、考慮すべき暗号化などがあります(グーグルで検索する必要があります)。これは、パスワード認証(sasl)を使用してpostfixを構成する方法です。

  • 以下を使用して 、ソフトウェアセンターアイコンをクリックするか、ターミナルからlibsasl2-moduleslibsasl2-modulesをインストールしますおよび sasl2-bin をインストールします sasl2-binをインストールする

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • 次の行を追加してsasl-authを有効にします /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • 次の/etc/postfix/sasl_passwordような行でファイルを作成します。

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
    

    実際のパスワード、ユーザー名、およびSMTPアドレスを置き換えます。

  • 後置記号を更新:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    あなたは回避する必要がある場合がありますバグを「許可が拒否された」によってchown postfix:postfix /etc/postfix事前に。

ほとんどの場合、これでうまくいくはずです。ただし、一部のsmtpプロバイダーでは、送信者または暗号化として特定のアドレスが必要です。

関連:PEAR :: Mailインターフェースも興味があるかもしれません。

Gmail(およびおそらく他のサービス)は、標準で安全でないとみなされる可能性があるため、この方法でメールを送信しようとすることを好まない場合があります。あなたの認証。また、POP3を有効にする必要があります。

それに対抗するには、こちらをご覧ください。(安全のために、ダミーのGmailアカウントを作成します)


Ubuntu(ローカル)からのメール送信は機能します。しかし、Windowsでこのマシンを使用してメールを送信する場合(PHPも)はどうなりますか?どうすれば設定できますか?
JM at Work

質問を受け取るかどうかわかりません。Ubuntuマシンからサンディングできます。さて、あなたがやりたいのは、Windows PCからPHPを介してそのUbuntuマシンを介してmalを送信することですか?あれは正しいですか?
con-f-use

2
現在、パッケージlibsasl2は存在しません。11.04を使用しています。そのlibsasl2-2更新パッケージごとのように...
mythicalcoder

61

既に述べたように、自宅のコンピューターでアプリケーションを開発しているときにphpからメールを送信するだけであれば、postfixは過剰になります。

私は個人的に非常にシンプルで軽量なパッケージssmtpを使用しています。smtpサーバーを使用して送信メールを送信します。次を実行してインストールします:

sudo apt-get install ssmtp

次に/etc/ssmtp/ssmtp.conf、ファイルを編集し、既存のメールハブの行をコメントアウトして、次の行を追加します(この例はgmail smtpサーバー用です)。

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Gmailのユーザー名とパスワードを入力します。もちろん、他のSMTPサーバーを使用できます)。

php.iniが正しいことを確認してくださいsendmail_path。次のようになります。

sendmail_path = /usr/sbin/sendmail -t

@ dima-lと@ omar-sabicのコメントからssmtpインストールがを/usr/sbin/sendmail指すシンボリックリンクを作成する必要があるため、ここで指定する必要はありませんssmtp。そうでない場合は指定する必要がありますsendmail_path = /usr/sbin/ssmtp -t

Apacheをリロードすると、PHPが送信メールを送信できるようになります。


3
私はあなたが意味したと思いますsendmail_path = /usr/sbin/ssmtp -t。これは、おかげで働いていた
オマールのSabicを

1
ssmtpは/usr/sbin/sendmail、ssmtpを正しく指すシンボリックリンクを作成する必要があります。だから、使用しては、sendmail_path = /usr/sbin/sendmail -t同様に動作するはずです
ディマL.

2
設定の詳細ssmtp(いくつかの有用な注意事項が見つかりました):DebianでPHPメールを設定する方法 -この質問+このリンクはプログラムの設定に役立ちました。
gskema

1
Gmailを使用するには、「安全でないアプリ」が機能するようにGoogleアカウントを設定する必要があります。参照してくださいsupport.google.com/accounts/answer/6010255
aesede

1
またFromLineOverride=YES、次のエラーを回避するために、次の行を追加する必要がありました550 5.7.60 SMTP; Client does not have permissions to send as this sender
。– Caumons

29

PHPでは、メールを送信するためにSMTPクライアントが必要です。この機能を果たすために、Postfixのようなフル機能のメール転送エージェント(MTA)をインストールすることもできますが、PHPを介してメールを送信するだけの場合はやり過ぎです。代わりに、msmtpをインストールしてください。軽量で、設定がはるかに簡単です。

msmtpをインストールする

sudo apt-get install msmtp-mta ca-certificates

構成する

新しい構成ファイルを作成します。

sudo vi /etc/msmtprc

...次の構成情報を使用します。

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

「<」および「>」内のすべてで表される構成データを置き換える必要があります(これらを含めて、削除します)。ホスト/ユーザー名/パスワードには、メールプロバイダーを介してメールを送信するための通常の資格情報を使用します。

PHPに使用するように指示する

sudo vi /etc/php5/apache2/php.ini

この単一行を追加します。

sendmail_path = /usr/bin/msmtp -t

もちろん、php.iniなしの「sudo vi /etc/php5/conf.d」は機能しません。私の場合(Ubuntu)、「/ etc / php5 / apache2 / php.ini」を編集し、apache「sudo /etc/init.d/apache2 reload」を再起動して動作させる必要がありました。
デヤン

1
ところで、あなたは使用してmsmtprcの設定をテストすることができますcat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
デヤン・

いいでしょうが、それは私のために働いていません。ログには何も表示されません。まったく問題ないようですが、サイコロはありません。
ジェームズTスネル

2
システム全体でmsmtpを使用できるようにするには、「msmtp-mta」をインストールします。
colan

1
以下の手順で私のような文字通りすぎる場合、実際には構成ファイルに<>括弧を入れないでください。それを把握するために私に良い20分かかりました
ドRaad氏

4

簡単な修正である必要があります。実際のメール送信を行うPostfixをインストールするだけです。

sudo apt-get install postfix

いくつかのセットアップの質問をする必要があるため、ターミナル(ソフトウェアセンターではなく)から実行する必要があります。すべてのデフォルト(ローカルのみなど)をそのまま使用するようにしてください。


2

これは古い質問であり、上記の価値のある答えがありますが、私eximは自分の環境に必要でした。また、sendmailが最初にインストールされていることを確認してください($ which sendmail--usr / sbin / sendmailのようなものが返されるはずです)。linode.comで良いガイドを見つけましたが、要点は次のとおりです。

apt-get install exim4-daemon-light mailutils

に続く:

dpkg-reconfigure exim4-config

インタラクティブなエディターが表示されます。


1

素晴らしい答え、コンフユーズ。

「ダミーのGmailアカウント」について追加することが1つあります。

安全性の低いアプリケーションを許可するようにGmailアカウントを設定する必要があるため、これを強くお勧めします:https : //www.google.com/settings/u/0/security/lesssecureapps それ以外の場合は、「Webブラウザを使用してログインしてください」/var/log/mail.logファイルにもう一度入力してください」というエラーが表示されます。

また、ルート証明書をgmail smtpサーバーに送信しない限り、タイムアウトエラーが発生することがわかりました。これをする:

sudo nano /etc/postfix/main.cf

ファイルの最後に以下を追加します

smtp_tls_CAfile = /etc/postfix/cacert.pem

次に、thawteルート証明書をcacert.pemファイルにコピーします。

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

ここに私が使用したリンクがあります:UbuntuでGmail SMTPを使用するようにPostfixを構成する| EasyEngine

うまくいけば、これで誰かが毛包を少し節約できます...


0

Dima L.が提供するソリューションは、システムにとって最も簡単で軽量な方法であることがわかりました。

設定をより明確にするための追加です。ファイルにコメントする必要hostnameがあり/etc/ssmtp/ssmtp.confます。サンプルssmtp.confファイルは次のとおりです。

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
AuthUser=mail@yourdomain.com
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.