template design by http://www.20shx.com/
时间:2014-02-24 发布人:SHX 浏览次数:6952 评论:3
在很多时候,我们需要网站做一些发邮件的工作。比如:邮箱验证、密码找回等。下面就给大家介绍一个利用smtp发送邮件的方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | <?php /** 003 * smtp邮件发送函数 004 * site www.jbxue.com 005 使用方法 sendmail('发送地址', '邮件主题', '邮件内容') 006 */ $bfconfig = Array ( 'sitename' => '脚本学堂' , //这里填写网站名称 ); $mail = Array ( 'state' => 1, 'server' => 'smtp.qq.com' , 'port' => 25, 'auth' => 1, 'username' => '' , //用户名 'password' => '' , //密码 'charset' => 'gbk' , 'mailfrom' => '' //发件人 ); function sendmail( $mail_to , $mail_subject , $mail_message ) { global $mail , $bfconfig ; date_default_timezone_set( 'PRC' ); $mail_subject = '=?' . $mail [ 'charset' ]. '?B?' . base64_encode ( $mail_subject ). '?=' ; $mail_message = ( base64_encode (preg_replace( "/(^|(\r\n))(\.)/" , "\1.\3" , $mail_message ))); $headers .= "" ; $headers .= "MIME-Version:1.0\r\n" ; $headers .= "Content-type:text/html\r\n" ; $headers .= "Content-Transfer-Encoding: base64\r\n" ; $headers .= "From: " . $bfconfig [ 'sitename' ]. "<" . $mail [ 'mailfrom' ]. ">\r\n" ; $headers .= "Date: " . date ( "r" ). "\r\n" ; list( $msec , $sec ) = '(" ", microtime())' ; $headers .= "Message-ID: <" . date ( "YmdHis" , $sec ). "." .( $msec * 1000000). "." . $mail [ 'mailfrom' ]. ">\r\n" ; if (! $fp = fsockopen ( $mail [ 'server' ], $mail [ 'port' ], $errno , $errstr , 30)) { exit ( "CONNECT - Unable to connect to the SMTP server" ); } stream_set_blocking( $fp , true); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != '220' ) { exit ( "CONNECT - " . $lastmessage ); } fputs ( $fp , ( $mail [ 'auth' ] ? 'EHLO' : 'HELO' ). " befen\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 220 && substr ( $lastmessage , 0, 3) != 250) { exit ( "HELO/EHLO - " . $lastmessage ); } while (1) { if ( substr ( $lastmessage , 3, 1) != '-' || empty ( $lastmessage )) { break ; } $lastmessage = fgets ( $fp , 512); } if ( $mail [ 'auth' ]) { fputs ( $fp , "AUTH LOGIN\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 334) { exit ( $lastmessage ); } fputs ( $fp , base64_encode ( $mail [ 'username' ]). "\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 334) { exit ( "AUTH LOGIN - " . $lastmessage ); } fputs ( $fp , base64_encode ( $mail [ 'password' ]). "\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 235) { exit ( "AUTH LOGIN - " . $lastmessage ); } $email_from = $mail [ 'mailfrom' ]; } fputs ( $fp , "MAIL FROM: <" .preg_replace( "/.*\<(.+?)\>.*/" , "\\1" , $email_from ). ">\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 250) { fputs ( $fp , "MAIL FROM: <" .preg_replace( "/.*\<(.+?)\>.*/" , "\\1" , $email_from ). ">\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 250) { exit ( "MAIL FROM - " . $lastmessage ); } } foreach ( explode ( ',' , $mail_to ) as $touser ) { $touser = trim( $touser ); if ( $touser ) { fputs ( $fp , "RCPT TO: <" .preg_replace( "/.*\<(.+?)\>.*/" , "\\1" , $touser ). ">\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 250) { fputs ( $fp , "RCPT TO: <" .preg_replace( "/.*\<(.+?)\>.*/" , "\\1" , $touser ). ">\r\n" ); $lastmessage = fgets ( $fp , 512); exit ( "RCPT TO - " . $lastmessage ); } } } fputs ( $fp , "DATA\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 354) { exit ( "DATA - " . $lastmessage ); } fputs ( $fp , $headers ); fputs ( $fp , "To: " . $mail_to . "\r\n" ); fputs ( $fp , "Subject: $mail_subject\r\n" ); fputs ( $fp , "\r\n\r\n" ); fputs ( $fp , "$mail_message\r\n.\r\n" ); $lastmessage = fgets ( $fp , 512); if ( substr ( $lastmessage , 0, 3) != 250) { exit ( "END - " . $lastmessage ); } fputs ( $fp , "QUIT\r\n" ); } sendmail( '1637838569@qq.com' , '邮件主题' , '邮件内容' ) ?> |
这里的smtp
1 | 'server' => 'smtp.qq.com' |
可以是个大邮箱提供商的,比如QQ邮箱、163邮箱等等;
QQ邮箱:smtp.qq.com
163邮箱: smtp.163.com
QQ个人免费企业邮箱:smtp.exmail.qq.com
上一篇:XP系统的结束,继承者windows7下一篇:三国演义告诉我们的人生60条真理