


Beginner's guide to sending emails via smtp using php_PHP tutorial
由于php没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自行深入学习。本文撰写日期是2004年7月2日,阅读时请注意时效性。
“使用php发送mail”最近已经成为继“register_globals”以后本版第二个新手陷阱,今天特地写这篇文章为新手解惑,希望可以为迷茫的人指明方向。
让我们先从以下这个例子开始说起:
引用: |
[root@server~/]# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is ^]. 220 server.domain.com.br ESMTP Postfix (2.1.0) MAIL FROM: teste@dominio.com.br 250 Ok RCPT TO: teste@dominio.com.br 250 Ok DATA 354 End data with teste . 250 Ok: queued as 7B41F4665A QUIT 221 Bye Connection closed by foreign host. 注:以上来自netkiller的postfix文档,偷懒,直接用现成的。 |
首先是使用telnet来连接本地的25端口,稍微熟悉点网络的人都知道smtp协议使用25端口,这也就是说,现在在连接本地的smtp服务器。
引用: |
Trying 127.0.0.1... Connected to localhost. Escape character is ^]. 220 server.domain.com.br ESMTP Postfix (2.1.0) |
这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。
“MAIL FROM: teste@dominio.com.br”这个命令指明了发件地址是teste@dominio.com.br,“250 Ok”说明这条命令被服务器接受并正确执行,这类似http协议的200、404、500等状态代码。接下来的“RCPT TO: teste@dominio.com.br”指明了收件地址是teste@dominio.com.br。
引用: |
DATA 354 End data with teste . |
这一段是输入邮件正文,输入“DATA”以后系统提示使用“<回车>.<回车>”来结束输入,正文内容是“teste”。
最后使用“QUIT”退出。
以上就是最简单的一次发送mail的过程,从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。
把这个过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连接,然后发送文本的命令给服务器,如果你亲自去看看那些写好的利用smtp协议发送邮件的类或者函数,相信可以印证我的说法。
由于已经存在很多现成的封装得很好的类或者函数替我们完成底层的socket级操作,我们只需要直接拿来用就好,而我也不会费时费神的在本文里去讨论底层的代码,有精神去研究的话,自己找代码来研究吧。现在继续跟我走,我们来点实际的代码来说明如何使用php发送邮件,采用的类是PEAR::Mail。
代码: |
require_once Mail.php; $conf[mail] = array( host => xx.xx.xx.xx, //smtp服务器地址,可以用ip地址或者域名 auth => true, //true表示smtp服务器需要验证,false代码不需要 username => tester, //用户名 password => retset //密码 ); /*** * 使用$headers数组,可以定义邮件头的内容,比如使用$headers[Reply-To]可以定义回复地址 * 通过这种方式,可以很方便的定制待发送邮件的邮件头 ***/ $headers[From] = tester@domain.com; //发信地址 $headers[To] = tester@domain.com; //收信地址 $headers[Subject] = test mail send by php; //邮件标题 $mail_object = &Mail::factory(smtp, $conf[mail]); $body = <<< MSG //邮件正文 hello world!!! MSG; $mail_res = $mail_object->send($headers[To], $headers, $body); //发送 if( Mail::isError($mail_res) ){ //检测错误 die($mail_res->getMessage()); } ?> |
The above code is very simple and should not be difficult to understand with the comments. For more information about PEAR and PEAR::Mail, you can read the PEAR Manual for further information.
Now you’re good to go, but if you want to do better and do more, I’m here to provide some more guidance.
1. SMTP protocol
Be familiar with and understand the contents of the SMTP protocol, so that you can perform more advanced operations, and even write an email program to meet your own special needs. Although the above code is simple, there must still be many people who don't understand what the email header mentioned in the comments is and what impact it has on the outgoing emails.
For example, "Why does the other party see garbled characters when sending HTML emails?" and other problems may be related to the email header. If you have a good understanding of the SMTP protocol, you can quickly know the problem.
2. MIME specification
If you want to send HTML emails or even multimedia emails, you must have a certain understanding of MIME. With this knowledge, you can send emails with more exciting content.
3. PEAR
PEAR is not the only tool for sending emails, but PEAR includes Mail, Mail_Mime and other encapsulated classes, which can make our development more efficient, and in addition to Mail things, it It also provides many other ready-made tools, which are well worth the time to learn.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

In this chapter, we are going to learn the following topics related to routing ?

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Validator can be created by adding the following two lines in the controller.
