私はcentos Serverを使用しており、ユーザーにメールを送信する必要があるため、1つのサーバーから実行中のコードをコピーしてここで使用しましたが、メールを送信していません。
コードは:
$to = $email; //writing mail to the user
$subject = "Hii";
$message = "<table>
<tr><td> Hello ".$email.",</td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
</table>" ;
$from = "[email protected]";
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'From: Team <[email protected]>' . "\r\n";
if(mail($to,$subject,$message,$headers))
{
echo "0";// mail sent Successfully.
}
else
{
echo "1";
}
常に1を出力します。他のプロジェクトでも同じコードが正常に実行されます。ここでも有効にするためにできることを教えてください。どんな助けも大歓迎です!
Sendmail *をインストールし、次のコマンドを実行した後:
[root@sendmail ~]# yum install sendmail*
[root@sendmail mail]# yum install dovecot
[root@sendmail mail]# cd /etc/mail/
[root@sendmail mail]# vi local-Host-names
# local-Host-names - include all aliases for your machine here.
example.com
[root@sendmail mail]# vi /etc/dovecot.conf
protocols = imap pop3 //uncomment
[root@sendmail mail]# m4 sendmail.mc > sendmail.cf
[root@sendmail mail]# make
[root@sendmail mail]# /etc/init.d/sendmail start
[root@sendmail mail]# /etc/init.d/saslauthd start
[root@sendmail mail]# /etc/init.d/dovecot start
[root@sendmail mail]# chkconfig sendmail on
[root@sendmail mail]# chkconfig dovecot on
[root@sendmail mail]# chkconfig saslauthd on
私はまだ同じ問題を抱えていました。 /var/log/maillog
とエラーが発生しました:
My unqualified Host name (domain) unknown; sleeping for retry
さらに検索した後、/etc/hosts
from:
127.0.0.1 localhost localhost.localdomain domain
ip.ip.ip.ip domain localhost
に:
127.0.0.1 localhost.localdomain localhost domain
ip.ip.ip.ip localhost domain
そして今、メール機能は正常に動作しています。
私はこれが回答されたことを知っていますが、同様の問題がありました。誰か他の人に....
/ var/log/maillogは、Postfixパーミッションの問題を示しました。
sendmail: fatal: chdir /var/spool/postfix: Permission denied
エラーの追跡私は、CentOS上のSELinuxポリシーであるソリューションを見つけました(バージョン6を使用しています)。
素早い回答: setsebool httpd_can_sendmail 1
-Pを使用して、変更を永続的にすることができます。パスワードリセットメールが必要なだけなので、私の場合は必要ありません。
クレジット: http://www.spidersoft.com.au/2011/posftix-permission-denied-problem/?ModPagespeed=noscript
編集:私はコメントしただろうが、私はまだ十分な評判を持っていません。
同じ問題がありました。私は自宅に開発サーバーを持ち、外部サーバーハウスにprodサーバーを持ち、受信メールは他のサーバーに送られます。 PHP:s mail()
は、サーバーハウスではうまく機能しますが、自宅では機能しません。
私は少しテストして、サーバーハウスと同じ方法で自宅で動作するようにしました。サーバーハウスとホームのメソッドの違いは、sendmailの構成です。サーバーハウスsendmailをインストールするだけで問題ありませんでしたが、自宅ではsendmail-cfもインストールし、それを使用して送信メールサーバーアドレスを追加する必要がありました。
Centos、Apache、およびPHPがホームサーバーにあり、PHP:s mail()関数を使用してメールを送信したいとします。
1)ホームサーバーのホスト名を次の2つの場所に設定します:/ etc/sysconfig/networkと/ proc/sys/kernel/hostnameこの方法:
#nano /etc/sysconfig/network NETWORKING = yes HOSTNAME = mydns157.dlinkddns.com #nano/proc/sys/kernel/hostname HOSTNAME = mydns157.dlinkddns.com
2)sendmailとsendmail-cfをインストールします。
#yum install sendmail sendmail-cf
3)次の行を/etc/mail/sendmail.mcに追加します。ISPの送信メールサーバーがあります。
define( `SMART_Host '、` mail.myisp.com')dnl
4)sendmail.cfを更新します。
#/etc/mail/make
5)sendmailとApacheを再起動します。
#service sendmail restart #service httpd restart
6)ホスト名を更新するために起動します:
#再起動
それでおしまい。現在、次のように機能します。
#php -r'mail( "[email protected]"、 "Subject"、 "Body"、null、 "[email protected]"); '
-fをスキップできます。
#php -r'mail( "[email protected]"、 "Subject"、 "Body"); '
この場合、送信者の名前は自動的にuser @ hostnameになります。 [email protected]。
ホスト名のメモ
ホスト名の選択は重要です。 Centos6のデフォルトは_localhost.localdomain
_ですが、mail()を呼び出すときに独自の送信者アドレス(たとえば_'[email protected]'
_)をスキップすると、mail()
は動作しません。実際のアドレスを送信者アドレスとして使用して常にmail()を呼び出すことが確かな場合、ホスト名は何でもかまいませんが、送信者アドレスのないmail()の既存の呼び出しがある場合(私はサーバーのホスト名はこれらの場合にsender-address-domainとして使用されるため、ホスト名として実際のドメインが必要です。ドメインには少なくともDNS Aレコードが必要であるという意味で本当です(何らかの理由で、ISPは送信者アドレスにNSレコードを必要とせず、Aレコードのみを必要としますが、ISPでテストおよびチェックします)。電子メール以外のドメインを送信者アドレスとして使用することのマイナス面は、返信と配信通知がちょっとした天国に行くことですが、コードで送信者アドレスをドロップすると、通常、何かをテストしてデバッグし、返信する必要がないことを意味します機能。ドメインは、たとえばダイナミックDNSサーバーから取得するもの。 _mydns157.dlinkddns.com
_。ホームルーターを指すことができます(ただし、そうする必要はありません)。次のような配列を返すdns_get_record("mydns157.dlinkddns.com")
を使用して、PHPでDNSレコードを取得できます。
[ホスト] => mydns157.dlinkddns.com [タイプ] => A [ip] => 92.152.214.137 [クラス] => IN [ttl] => 7
上記のDNSレコードのtype
がNS
である場合、ドメインは電子メールドメインとして機能し、自身のサーバーのホスト名には問題ありませんが、効果は少し異なります。ホスト名として既存のメールドメインを設定した場合(例: _myexistingemaildomain.com
_、およびメッセージを_[email protected]
_に送信します。たとえば、デバッグの目的で、sendmailは、このサーバー上のユーザーme
のメールフォルダーにメッセージを配信する必要があると考えます。 me
ユーザーが存在しない場合、送信は失敗し、ユーザーが存在する場合、メッセージは_/var/mail/me
_に送られます。これはあなたが望むものですが、(私のように)あなたはすべてのメッセージがサーバーフォルダの代わりに外部に配信されることを望むかもしれません。
ホスト名(DNSレコード内)は、送信者アドレスが不足している場合にmail()を機能させるためにサーバーの実際の外部IPを指す必要はありませんが、害はありません。主なことは、ホスト名に有効なAレコードがあり、ドメインが自分のものであることです。ドメインが自分のものでない場合、セキュリティホールが生じる可能性があります。ホスト名として既存の電子メールドメインを設定した場合(例: _Microsoft.com
_(何らかの理由で)、mail()の呼び出し時に独自の送信者アドレスを追加せずにメッセージを送信する(例_'[email protected]'
_)、送信者アドレスは自動的に_[email protected]
_になります。ルートとしてログインしている場合、送信者アドレスは_[email protected]
_になります。失敗した配信の返信と通知は_[email protected]
_に送られますが、これは意図しない場合があります。
これを簡単に行うには、SwiftMailerを使用することをお勧めします。
require_once('../lib/swiftMailer/lib/Swift_required.php');
function sendEmail(){
//Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
$body="Dear $fname,\n\nYour job application was successful. \n\nYours,\n\nEamorr\n\n\n\n\n\n\n";
//Create a message
$message = Swift_Message::newInstance('Subject goes here')
->setFrom(array($email => "[email protected]"))
->setTo(array($email => "$fname $lname"))
->setBody($body);
//Send the message
$result = $mailer->send($message);
}
これはあなたを助けるかもしれません
ini_set('sendmail_from', '[email protected]');
私はちょうどこの問題を抱えていました、二つのこと。
私のメールはスパムになりそうだったので、間違いなくチェックしてください。おそらく、サーバーに適切なPTRおよびSPFレコードがなかったためです。
しかし、これでsendmailをテストする方がずっと簡単だとわかりました。
sendmail -s '[email protected]'
Subject:Testing!
hey there, how ya doin?
CTRL+D
/ var/log/maillogのメールログを常に確認して、問題の原因を確認してください。ポストフィックスを適切に構成した後、同様の問題が一度発生しました。 fatal: setrlimit: Permission denied
というエラーが発生しました。回避策は、getsebool httpd_can_sendmail
コマンドによって、httpdがメールを送信できるかどうかを確認することです。 httpdがメールを送信できる場合はオフにし、setsebool -P httpd_can_sendmail 1
コマンドで有効にします。お役に立てれば。