web-dev-qa-db-ja.com

PHPメールを送信する方法

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

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

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

71
JM at Work

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

要件

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

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

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

Postfixインストール

インストール: postfixInstall postfix /Sudo apt-get install postfixプロセス中に、Postfixをインストールするモードを尋ねられます。次の4つのモードがあります。

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

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

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

インストール後の構成

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

  • インストール libsasl2-modulesInstall libsasl2-modules および sasl2-binInstall sasl2-bin Software Centerアイコンをクリックするか、以下を使用して端末から:

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

     # 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 [email protected]: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による 'permission denied' bug を回避する必要があるかもしれません。

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

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

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

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

51
con-f-use

すでに述べたように、自宅のコンピューターでアプリケーションを開発しているときに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が送信メールを送信できるようになります。

60
Dima L.

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 <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

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

PHPにそれを使用するように伝えます

Sudo vi /etc/php5/Apache2/php.ini

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

sendmail_path = /usr/bin/msmtp -t
29
colan

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

Sudo apt-get install postfix

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

4
Oli

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

apt-get install exim4-daemon-light mailutils

に続く:

dpkg-reconfigure exim4-config

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

2
vrobinson

グレートアンサー 、con-f-use。

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

安全性の低いアプリケーションを許可するようにGmailアカウントを設定する必要があるため、これを強くお勧めします。 https://www.google.com/settings/u/0/security/lesssecureapps それ以外の場合は、 /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

私が使用したリンクは次のとおりです。 buntuでGmail SMTPを使用するようにPostfixを設定| EasyEngine

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

1
deputy_D

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

設定をより明確にするための追加です。 /etc/ssmtp/ssmtp.confファイルでhostnameにコメントする必要があります。サンプル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
[email protected]
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
0
SD.