61阅读

sendmail发邮件-PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

发布时间:2017-12-23 所属栏目:php编程

一 : PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

本文实例讲述了PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法。分享给大家供大家参考,具体如下:

1、php mail()函数在windows不能用,需要安装sendmail。

2、从http://glob.com.au/sendmail/ 下载sendmail组件

3、解压sendmail.zip到目录下,我安装的路径是: F:rootsendMail

4、配置php.ini,主要配置以下3项

5、修改 sendmail.ini,文件路径:F:rootsendMailsendmail.ini

 smtp_server=smtp.qq.com smtp_port=25 auth_username=yourusername auth_password=yourpassword force_sender=******@qq.com 

6、测试发送邮件

 <?php if(mail("test@test.com","测试","测试邮件")){  echo "success"; } else {  echo "fail"; } 

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

二 : 求助,关于sendmail不能向外网发送邮件的问题????

Redhat AS3+Sendmail+Openwebmail

一 Redhat Linux AS3

配置要求:

域名:gao.org

IP:192.168.1.198

1. 配置dns ,能够正常解析gao.org域,本例:www.61k.com应IP 192.168.1.198

nslookup –silwww.61k.com

nslookup –sil192.168.1.198

来检查正向域名配置是否有误

2. 配置:Sendmail

/etc/mail/access

gao.org (添加域名)

163.com (允许发往目的地的域名)

192.168.1 (充许 192.168.1.0 网段的用户向外发送邮件)

Fandy不受发送限制(可以无限制的发送和接收Interanl、internet的电子邮件)

修改后用make access.db 生成新的 access.db文件。

/etc/mail/local-host-names

abc.com(添加域名,收取信件的本地域名)

3.SMTP配置

/etc/mail/sendmail..cf

# SMTP daemon options

O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA

更改为

O DaemonPortOptions=Port=smtp,Addr=192.168.1.198, Name=MTA

修改完成后用:netstat –nl 命令查看

4.POP3 配置

RedHatLinux AS3默认安装的时候并没有安装POP/IMAP,所以你需要安装imap-2002d-2包

rpm –Uvh imap-2002d-2.i386.rpm

为了用户可以使用foxmail,outlook等软件进行收信。您需要安装imap。打开系统的pop3端口。

配置:

/etc/xinetd.d/ipop2

默认:disable=yes 改为:disable=no

/etc/xinetd.d/ipop3

默认:disable=yes 改为:disable=no

/etc/xinetd.d/ipop3

默认:disable=yes 改为:disable=no

/etc/xinetd.d/pops

默认:disable=yes 改为:disable=no

5.sendmail的性能优化

或许你会收到这样的抱怨,说是当客户端程序运行在防火墙后面的话会发生连接pop端口速度变慢.造成这个延时的原因是你的e-mail服务器初始一个IDENT会话来确认客户端的身份.如果这个询问没有反应,那服务器就会在5秒后发出一个超时信号.这个值可以降低到1秒,从而减少IDENT产生影响

.修改/etc/mail/sendmail.cf文件,把timeout的值改成你想要的值.

# timeouts (many of these)

#O Timeout.ident=5s

改成

O Timeout.ident=1s

到此sendmail配置基本完成。在局域网内,所有用户可以用foxmail,outlook可以在本服务器内发送邮件。

二Openwebmail

安装必要的软件包,可以从 http://www.61k.com下载

perl-CGI-2.81-88.4.i386.rpm

perl-Compress-Zlib-1.21-RH9.i386.rpm

perl-Text-Iconv-1.2-RH80.i386.rpm

perl-suidperl-5.8.0-88.i386.rpm

MIME-Base64-3.01.tar.gz

openwebmail-2.51-1.i386.rpm

cd /var/www/cgi-bin/openwebmail

ls –l

进入openwebmail下面的etc目录进行相关配置,需要修改以下

1./var/www/cgi-bin/openwebmail /etc/openwebmail.conf

2./var/www/cgi-bin/openwebmail/etc/defaults/openwebmail.conf

3./var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf

1./var/www/cgi-bin/openwebmail/etc/openwebmail.conf [只需修改3处]

releasedate 20041126

domainnames gao.org //默认是auto

auth_module auth_unix.pl

mailspooldir /var/spool/mail

ow_cgidir /var/www/cgi-bin/openwebmail

ow_cgiurl /cgi-bin/openwebmail

ow_htmldir /var/www/data/openwebmail

ow_htmlurl /data/openwebmail

logfile /var/log/openwebmail.log

修改语言为中文将:

default_language auto

改为:

default_language zh_CN.GB2312

图标还是英文将其改为中文



default_iconset Default

改成:

default_iconset Cool3D.Chinese.Simplified

2./var/www/cgi-bin/openwebmail/etc/defaults/openwebmail.conf [只需修改2处,把smtpserver和authpop3_server改为相应的IP]

domainnames auto

smtpserver 192.168.1..198

smtpport 25

smtpauth no

enable_pop3 yes

pop3_disallowed_servers your_server, your_server.domain

pop3_delmail_by_default yes

pop3_delmail_hidden no

pop3_usessl_by_default no

authpop3_server 192.168.1.198

authpop3_port 110

3./var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf[只需修改3处],完整的内容如下:

dbm_ext .db

dbmopen_ext .db

dbmopen_haslock yes

smtpserver 192.168.1.198 //添加SMTP服务器的IP地址

上面的文件修改完后,再运行./openwebmail-tool.pl –init执行初始化脚本

[root@AS3 openwebmail]#./openwebmail-tool.pl --init

进行初始化后,无需在Apach里发布openwebmail.

用Apache发布opwebmail

初始只能用http://服务器IP/cgi-bin/openwebmail/openwebmail.pl进行访问。

用Apache在80端口发布它,使访问时只需要输入http://服务器IP 或 http://www.61k.com(此例的域名)来进行访问。

写一个 html文件来进行跳转,内容如下

<html>

<body onload=

"window.open('http://your_server/cgi-bin/openwebmail/openwebmail.pl','_top')">

</body>

</html>

或者用:

<html><head>

<meta http-equiv="Refresh"

content="0;URL=http://your_server/cgi-bin/openwebmail/openwebmail.pl">

</head></html>

如果希望使用 http://服务器IP/mail 或 http://域名/mail 的方式,则修改如下:

修改 /etc/http/conf/httpd.conf (最后只采用一种方式)

Redirect /mail http://域名/cgi-bin/openwebmail/openwebmail.pl

Redirect /mail http://192.168.1.198/cgi-bin/openwebmail/openwebmail.pl

修改/etc/httpd/conf/httpd.conf

主页发现图标找不到,想到图标目录还没有做映射再加一句,每当对Apach进行修改后,都要重新配置此项.

Alias /data "/var/www/data"//自己添加

找到此例发布的80端口,进行修改

<VirtualHost *:80>

DocumentRoot /var/www/cgi-bin /发布时填写的原始路径,可作为查找对名象

ServerName _default_:80

DirectoryIndex index.html index.htm openwebmail.html index.shtml

<Directory "/var/www/cgi-bin/">

AllowOverride None

</Directory>

改为:

<VirtualHost *:80>

DocumentRoot /var/www/cgi-bin

ServerName _default_:80

DirectoryIndex index.html index.htm openwebmail.html index.shtml

<Directory "/var/www/cgi-bin/">

AllowOverride All

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

优化 Apach

MaxClients 150 同一时间最大连接数,

ServerAdmin gao@gao.org 改为网管的邮箱吧

Timeout 300 300秒没有反应就断开

Redhat AS4 + Sendmail +openwebmail

一 Redhat Linux AS4

配置要求:

域名:as4.org

IP:192.168.1.199

2. 配置dns ,能够正常解析as4.org域,本例:www.61k.com应IP 192.168.1.199

nslookup –silwww.61k.com

nslookup –sil192.168.1.199

来检查正向域名配置是否有误

2. 配置:Sendmail

/etc/mail/access

gao.org (添加域名)

163.com (允许发往目的地的域名)

192.168.1 (充许 192.168.1.0 网段的用户向外发送邮件)

Fandy不受发送限制(可以无限制的发送和接收Interanl、internet的电子邮件)

修改后用make access.db 生成新的 access.db文件。

/etc/mail/local-host-names

as4.org(添加域名,收取信件的本地域名)

3.SMTP配置

/etc/mail/sendmail..cf

# SMTP daemon options

O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA

更改为

O DaemonPortOptions=Port=smtp,Addr=192.168.1.198, Name=MTA

修改完成后用:netstat –nl 命令查看

3. POP3 配置

修改/etc/dovecot.conf文件

将:

#protocols = imap imap3

更改为:

protocols = imap imap3 pop3 pop3s (启动imap imap3 pop3 pop3s功能)

修改完后,用netstat –nl 进行查看

5.sendmail的性能优化

或许你会收到这样的抱怨,说是当客户端程序运行在防火墙后面的话会发生连接pop端口速度变慢.造成这个延时的原因是你的e-mail服务器初始一个IDENT会话来确认客户端的身份.如果这个询问没有反应,那服务器就会在5秒后发出一个超时信号.这个值可以降低到1秒,从而减少IDENT产生影响

.修改/etc/mail/sendmail.cf文件,把timeout的值改成你想要的值.

# timeouts (many of these)

#O Timeout.ident=5s

改成

O Timeout.ident=1s

到此sendmail配置基本完成。在局域网内,所有用户可以用foxmail,outlook可以在本服务器内发送邮件。

二 Openwebmail

安装必要的软件包,可以从 http://www.61k.com下载

perl-5.8.5-12.1.i386.rpm

perl-CGI-SpeedyCGI-2.22-1.2.el4.rf.i386.rpm

perl-Compress-Zlib-1.34-1.2.el4.rf.i386.rpm

perl-suidperl-5.8.5-12.1.1.i386.rpm

perl-Text-Iconv-1.4-1.2.el4.rf.i386.rpm

MIME-Base64-3.01.tar.gz

openwebmail-2.51-1.i386.rpm

cd /var/www/cgi-bin/openwebmail

ls –l

进入openwebmail下面的etc目录进行相关配置,需要修改以下

1./var/www/cgi-bin/openwebmail /etc/openwebmail.conf

2./var/www/cgi-bin/openwebmail/etc/defaults/openwebmail.conf

3./var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf

1./var/www/cgi-bin/openwebmail/etc/openwebmail.conf [只需修改3处]

releasedate 20041126

domainnames as4.org //默认是auto

auth_module auth_unix.pl

mailspooldir /var/spool/mail

ow_cgidir /var/www/cgi-bin/openwebmail

ow_cgiurl /cgi-bin/openwebmail

ow_htmldir /var/www/data/openwebmail

ow_htmlurl /data/openwebmail

logfile /var/log/openwebmail.log

修改语言为中文将:

default_language en

改为:

default_language zh_CN.GB2312

图标还是英文将其改为中文



default_iconset Cool3D.Englist

改成:

default_iconset Cool3D.Chinese.Simplified

2./var/www/cgi-bin/openwebmail/etc/defaults/openwebmail.conf [只需修改2处,把smtpserver和authpop3_server改为相应的IP]

domainnames auto

smtpserver 192.168.1..198

smtpport 25

smtpauth no

enable_pop3 yes

pop3_disallowed_servers your_server, your_server.domain

pop3_delmail_by_default yes

pop3_delmail_hidden no

pop3_usessl_by_default no

authpop3_server 192.168.1.198

authpop3_port 110

3./var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf[只需修改3处],完整的内容如下:

dbm_ext .db

dbmopen_ext .db

dbmopen_haslock yes

smtpserver 192.168.1.198 //添加SMTP服务器的IP地址

关闭系统的防火墙和SELinux

上面的文件修改完后,再运行./openwebmail-tool.pl –init执行初始化脚本

[root@AS3 openwebmail]#./openwebmail-tool.pl --init

进行初始化后,无需在Apach里发布openwebmail.

用Apache发布opwebmail

初始只能用http://服务器IP/cgi-bin/openwebmail/openwebmail.pl进行访问。

如果希望使用 http://服务器IP/mail 或 http://域名/mail 的方式,则修改如下:

修改 /etc/http/conf/httpd.conf (最后只采用一种方式)

Redirect /mail http://域名/cgi-bin/openwebmail/openwebmail.pl

Redirect /mail http://192.168.1.198/cgi-bin/openwebmail/openwebmail.pl

用Apache在80端口发布它,使访问时只需要输入http://服务器IP 或 http://www.61k.com(此例的域名)来进行访问。

写一个 html文件来进行跳转,内容如下

<html>

<body onload=

"window.open('http://your_server/cgi-bin/openwebmail/openwebmail.pl','_top')">

</body>

</html>

或者用:

<html><head>

<meta http-equiv="Refresh"

content="0;URL=http://your_server/cgi-bin/openwebmail/openwebmail.pl">

</head></html>

修改/etc/httpd/conf/httpd.conf

AS4系统如果发现图标找不到,需要自己手工指定图片位置,每当对Apach进行修改后,都要重新配置此项.

Alias /data "/var/www/data"//自己手工添

三 : sendmail-命令行发邮件利器

前段时间公司的一个项目刚刚上线,为了每天都能够查看系统中昨天出现的问题等各种关键信息,开发人员每天都远程登陆系统拿到产生的系统日志等其他文件,由于远程登陆还需要VPN,使用起来相当繁琐,并且效率不高,为此花掉的时间也挺多的.想了一想如何解决这个问题,得出的结论这种重复无意义的事情还是交给计算机做比较合适,于是花了周末的一个下午的时间使用Java编写了支持在命令行发送邮件的jar包,然后通过bat脚本调用制作为windows的计划任务(Scheduler, 注:系统部署在windows server之上)

在linux命令行中也有一个名为sendmail的程序可以支持命令行发送邮件,这里我也无耻的沿用这个名字.本文主要简单介绍一下该程序的使用方法,我相信可能会有朋友需要这个.

既然是jar包,运行时自然要使用java环境,先看帮助文档:

在命令行中敲入如下命令:

java -jar sendmail.jar -help(www.61k.com)

sendmail sendmail-命令行发邮件利器

好了,既然看了帮助文档那么我们就先按照帮助文档的example来发送一份邮件到我们各自的邮箱里面,在命令行输入以下命令:

java -jar sendmail.jar -t kmter@live.com -s "HelloSendMail" -b "Hi,shawyeok: This is first email from command line!"

当发送成功时命令行会打印出如下信息:

sendmail to [kmter@live.com] success

通过以上的命令我发送一封邮件到kmter@live.com这个邮箱里面,这是我的个人邮箱,如果大家在使用过程中发现了BUG请用这个邮箱和我联系,谢谢.下面我登陆到我的邮箱里面发现邮件的确已经收到了.

sendmail sendmail-命令行发邮件利器

通过上面的帮助文档和练习我们可以看到默认情况下该程序的发送者为sendmailcmd@163.com,这是本人为了供大家使用方便添加的默认用户,倘若你要使用该程序发送一些较为私密的信息,本人还是建议您修改一下,修改起来很简单,使用WinRAR或7Zip等压缩软件打开sendmail.jar,修改其中根目录下的default.properties文件的几个属性即可,修改方法如下图所示

sendmail sendmail-命令行发邮件利器

上面的有一点需要注意,就是hostnameport那里,每个email服务商的地址都不一样,如果你不太清楚该写成什么,可以在网上搜索一下你的email服务商的SMTP服务器地址,当然也可以单独申请一个163邮箱,这样一来hostname和port这里保持不变就可以了.

上面大致介绍了怎么样使用这个程序,但离实际应用还有一定距离,下面我就演示一下我在工作中对该程序的实际应用情况.

在本文开始处我已经对我们的应用情况作了简单描述,我们需要每天审查服务器产生的日志信息,于是编写了一个bat脚本,内容如下:

@ECHO off

IF "%JAVA_HOME%" == "" GOTO SETCMDPATH

IF NOT "%JAVA_HOME%" == "" GOTO SETSENDMAILPATH

:SETCMDPATH

SET JAVA_HOME="C:\Program Files\Java\jdk1.7.0_51"

:SETSENDMAILPATH

SET SENDMAIL_PATH="C:\Users\Shawyeok\Desktop\sendmail.jar"

:EXECUTE

"%JAVA_HOME%\bin\java.exe" -jar "%SENDMAIL_PATH%" -t "kmter@live.com" -s "WAS LOG REPORT" -a "D:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs" -b "This is Today WAS LOG! CTREAT BY SHAWYEOK!"

这里的脚本非常简单,首先检查了系统是否设置了JAVA_HOME环境变量,然后将sendmail的全路径设置为一个变量,这样一来调用就非常方便了,在EXECUTE中,我将"D:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs"这个文件夹作为附件添加到该邮件中了,该程序会自动将该文件夹压缩(目前仅支持zip压缩方式)为一个zip包.

好了,现在执行脚本也有了,我们怎么让其自动运行呢?windows系统中有Task Scheduler(计划任务),在控制面板 > 高级管理工具中可以打开该工具,下面要做的就是设置一个定时任务就行了,设置好触发器和执行动作就行,非常简单.

sendmail sendmail-命令行发邮件利器下载地址: http://pan.baidu.com/s/1pJlwWAJ

sendmail源码已托管在GitHub上: https://github.com/Shawyeok/sendmail

注:当您遇到BUG时,就是我能够改善程序的好机会,请与我联系(kmter@live.com),或者直接提交补丁到GitHub上也是不错的选择.

四 : LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)

LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix) - xiaoshi1991 - 博客园 至于sentmail和postfix的配置有多么麻烦老衲在这里就不多废话了...反正老衲是配置了N个小时,最终弄的头晕眼花也没弄好...

下面的方法可以让你完全摆脱这两个工具...当然,你要是想做邮件服务器的话就令当别论了...你要是只想让服务器自动发个邮件什么的,用下面的就行了

通常的做法都是,关闭本机的sendmail服务或者postfix服务,

#执行下面的命令,各位大侠都对号入座吧 #sendmial service sendmail stop chkconfig sendmail off #postfix service postfix stop chkconfig postfix off #再狠一点就直接卸载吧.. yum remove sendmail yum remove postfix

然后修改/etc/mail.rc,增加一下类似N行,指定外部的smtp服务器地址、帐号密码等。[www.61k.com]

1 # vi /etc/mail.rc 2 set from=123456@qq.com 3 set

smtp=smtp.qq.com 4 set smtp-auth-user=123456 5 set smtp-auth-password=sbsbsbsb 6 set smtp-auth=login

然后通过命令来发送邮件

echo hello word | mail -s " title" 123456@qq.com

linux 发邮件 LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)

可是发现在RHEL6运行是没有问题,在RHEL5下,mail命令始终是调用本地的sendmail服务来发送邮件的。(www.61k.com)

到底RHEL6和RHEL5下的mail和mailx又有着什么关系呢?

RHEL6下

mail 链接到 mailx 命令,mailx版本为12.4

# rpm -qa|grep mailx

mailx-12.4-6.el6.x86_64

# ll /bin/mail*

lrwxrwxrwx. 1 root root 5 7月 22 2011 /bin/mail -> mailx

-rwxr-xr-x. 1 root root 390424 2月 16 2010 /bin/mailx

# mail -V

linux 发邮件 LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)

12.4 7/29/08

RHEL5下,则发现了一些不同

mailx 链接到 mail 命令,mailx版本为8.1

# rpm -qa|grep mailx

mailx-8.1.1-44.2.2

# ll /bin/mail*

-rwxr-xr-x 1 root mail 84856 Jun 6 2007 /bin/mail

lrwxrwxrwx 1 root root 4 Apr 12 18:03 /bin/mailx -> mail

# mail -V 此处运行就会出错,没有-V这个参数

也就是说,在RHEL65下,运行mail 和mailx,实际上都是一个命令,而mail版本不同,导致了RHEL5下mail命令无法调用外部SMTP服务器。(www.61k.com)

安装mailx新版本可解决此问题。

linux 发邮件 LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)

下载地址:

代开这个网站。[www.61k.com)自己选一个下载地址

1 下载后

# tar jxvf mailx-12.4.tar.bz2 # cd mailx-12.4 # make # make install UCBINSTALL=/usr/bin/install

查看mailx程序默认安装位置、及版本

# whereis mailx mailx: /usr/local/bin/mailx

/usr/share/man/man1p/mailx.1p.gz # mailx -V 12.4 7/29/08

安装后的mailx使用的是 /etc/nail.rc 配置,不是 /etc/mail.rc 这个需要注意下。vi编辑,按下G ,然后在行尾添加如下N行

# vi /etc/nail.rc (看出亮点了吗?) 2 set from=123456@qq.com 3 set smtp=smtp.qq.com 4 set smtp-auth-user=123456 5 set smtp-auth-password=sbsbsbsb 6 set smtp-auth=login

然后通过命令来发送邮件

echo hello word | mailx -v -s " title" 123456@qq.com

就收到邮件了.... 哥比较懒,就不给你截图了...反正我是收到了。

linux 发邮件 LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)

成功发送的话,就可以看到类似的提示 235 2.7.0 Authentication successful >>> MAIL FROM:<demo@qq.com> 250 2.1.0 Ok

>>> RCPT TO:<xxxxx@qq.com> 250 2.1.5 Ok >>> DATA 354 End data with <CR><LF>.<CR><LF>

>>> . 250 2.0.0 Ok: queued as 9291963494 >>> QUIT 221 2.0.0 Bye

查看文档来源:

本文标题:sendmail发邮件-PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
本文地址: http://www.61k.com/1155337.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1