# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# Email 类

CodeIgniter 拥有强大的 Email 类来提供如下的功能：

- 多协议：Mail、Sendmail 和 SMTP
- 多个收件人
- 抄送和密送
- HTML 或纯文本邮件
- 附件
- 自动换行
- 邮件优先级
- 密送批处理模式，开启时，大邮件列表将被分成小批次密送。
- Email 调试工具

## 发送邮件

发送邮件不仅简单，而且可以发送时进行配置或者将参数放到配置文件中。

这里是一个发送邮件的标准示例。注意：该示例是假定使用一个控制器来发送邮件。

`$this->load->library('email');
$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->cc('another@another-example.com');
$this->email->bcc('them@their-example.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
$this->email->send();
echo $this->email->print_debugger();`

## 设置 Email 参数

有17个不同的有效参数来提供给你如何定制你发送的电子邮件。您可以在此手动设置，或自动通过你储存在配置文件中的键值来设置，描述如下：

参数设定通过一系列的参数值去完成电子邮件的initialize功能。这里有一个例子，说明怎样设置一些参数设定：

`$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);`

说明: 大多数参数都有默认值，如果你没有配置这些参数，它们的默认值就会被使用。

### 在配置文件中设置 Email 参数

如果您不想使用上述方法设定参数，您可以把它们放入一个配置文件。创建一个新文件名称为email.php ，添加$config数组在该文件中。然后将该文件保存为config/email.php 它将自动的被使用。如果您保存了一个参数配置文件，就不需要使用$this->email->initialize()函数来初始化参数了

## Email 参数

下面是发送电子邮件时可以设置的属性的列表。

参数 | 默认值 | 选项 | 描述
--- | --- | --- | ---
useragent | CodeIgniter | 无 | 用户代理 "user agent"。
protocol | mail | mail, sendmail, or smtp | 邮件发送协议。
mailpath | /usr/sbin/sendmail | 无 | 服务器上 Sendmail 的实际路径。protocol 为 sendmail 时使用。
smtp_host | 无默认值 | 无 | SMTP 服务器地址。
smtp_user | 无默认值 | 无 | SMTP 用户账号。
smtp_pass | 无默认值 | 无 | SMTP 密码。
smtp_port | 25 | 无 | SMTP 端口。
smtp_timeout | 5 | 无 | SMTP 超时设置(单位：秒)。
wordwrap | TRUE | TRUE 或 FALSE (布尔值) | 开启自动换行。
wrapchars | 76 |  | 自动换行时每行的最大字符数。
mailtype | text | text 或 html | 邮件类型。发送 HTML 邮件比如是完整的网页。请确认网页中是否有相对路径的链接和图片地址，它们在邮件中不能正确显示。
charset | utf-8 |  | 字符集(utf-8, iso-8859-1 等)。
validate | FALSE | TRUE 或 FALSE (布尔值) | 是否验证邮件地址。
priority | 3 | 1, 2, 3, 4, 5 | Email 优先级. 1 = 最高. 5 = 最低. 3 = 正常.
crlf | \n | "\r\n" or "\n" or "\r" | 换行符. (使用 "\r\n" to 以遵守RFC 822).
newline | \n | "\r\n" or "\n" or "\r" | 换行符. (使用 "\r\n" to 以遵守RFC 822).
bcc_batch_mode | FALSE | TRUE or FALSE (boolean) | 启用批量暗送模式.
bcc_batch_size | 200 | None | 批量暗送的邮件数.

## Email 函数参考

### $this->email->from()

设置发件人email地址和名称:

`$this->email->from('you@example.com', 'Your Name');`

### $this->email->reply_to()

设置邮件回复地址. 如果没有提供这个信息，将会使用"from()"函数中的值. 例如:

`$this->email->reply_to('you@example.com', 'Your Name');`

### $this->email->to()

设置收件人email地址(多个). 地址可以是单个、一个以逗号分隔的列表或是一个数组:

`$this->email->to('someone@example.com');` `$this->email->to('one@example.com, two@example.com, three@example.com');` `$list = array('one@example.com', 'two@example.com', 'three@example.com');
$this->email->to($list);`

### $this->email->cc()

设置抄送(Carbon Copy / CC) email地址(多个). 类似to()函数, 地址可以是单个、一个以逗号分隔的列表或是一个数组.

### $this->email->bcc()

设置暗送(Blind Carbon Copy / BCC) email地址(多个). 类似to()函数, 地址可以是单个、一个以逗号分隔的列表或是一个数组.

### $this->email->subject()

设置email主题：

`$this->email->subject('This is my subject');`

### $this->email->message()

设置email正文部分：

`$this->email->message('This is my message');`

### $this->email->set_alt_message()

设置可选的邮件EMAIL正文部分:

`$this->email->set_alt_message('This is the alternative message');`

这是EMAIL可选的一部分，如果你发送带HTML的邮件，这可以用到。它用于当接收邮件都不支持HTML格式时显示给用户的内容。如果你没有设置这部分，CodeIginiter会自动从邮件正文中提取去掉TAGS的部分。

### $this->email->clear()

将所有EMAIL的变量清空. 这个方法用于当你在循环中发送邮件时，可以在两次循环中重新设置邮件内容。

`foreach ($list as $name => $address)
{
$this->email->clear();
$this->email->to($address);
$this->email->from('your@example.com');
$this->email->subject('Here is your info '.$name);
$this->email->message('Hi '.$name.' Here is the info you requested.');
$this->email->send();
}`

如果将参数设为TRUE，附件也会被清空:

`$this->email->clear(TRUE);`

### $this->email->send()

发送EMAIL. 根据发送结果，成功返回TRUE,失败返回FALSE。就可以将它用于判断语句:

`if ( ! $this->email->send())
{
// Generate error
}`

### $this->email->attach()

添加附件。第一个参数是相对于入口文件的文件路径/文件名（不能写成'/path/photo1.jpg'). 注意: 是路径而不是URL。多次使用该函数可以添加多个附件:

`$this->email->attach('path/photo1.jpg');
$this->email->attach('path/photo2.jpg');
$this->email->attach('path/photo3.jpg');
$this->email->send();`

### $this->email->print_debugger()

返回包含邮件内容的字符串，包括EMAIL头和EMAIL正文。用于调试。

## 取消自动换行

如果你启用自动换行(建议遵循 RFC 822)，EMAIL中有一个非常长的链接它将会换行，导致链接不能被收信人直接点击打开。CodeIgniter可以对正文的部分片段避免这种自动换行，比如:

`The text of your email that
gets wrapped normally.
{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
More text that will be
wrapped normally.`

将你不想自动换行的部分放入: {unwrap} {/unwrap}中间

翻译贡献者: 498621, csfhc, ekawayi, Hex, ianyang, imjie, kele_87, larryli, roln, sygb, xjflyttp, xluohome, yinzhili, yygcom
最后修改: 2014-02-26 22:19:14