<?php
/**
* 功能: 发送邮件
* 版本: 0.1
* 日期: 2007-6-4 18:58:50
* 作者: willko (willko@mail.csdn.net, http://www.willko.cn)
* 版权: (C)版权所有 willko
*/
class hellomail {
private $host;
private $port;
private $username;
private $password;
private $auth;
private $fp;
public $cn;
/**
* 功能 : 初始化
* $host : SMTP地址
* $username : SMTP用户名 (如果需要身份验证必填)
* $password : SMTP密码 (如果需要身份验证必填)
* $auth : SMTP服务器是否需要身份验证,true表示需要
* $port : SMTP端口
*
* @param string $host
* @param string $username
* @param string $password
* @param int $port
* @param bool $auth
*/
public function __construct($host, $username=null, $password=null, $auth=false, $port=25) {
$this->host = $host;
$this->port = $port;
$this->username = $username;
$this->password = $password;
$this->auth = $auth;
$cn = getenv('COMPUTERNAME');
}
/**
* 功能 : 发送邮件
* $header['from'] : 发件人 (必须)
* $header['to'] : 收件人 (必须)
* $header['subject'] : 主题
* $header['reply-to'] : 回复邮箱
* $content : 信件内容
*
* @param array $headers
* @param string $content
*/
public function send($headers, $content=null) {
$content = preg_replace('/<?<!\r>(\n)/', '\r\n', $content);
$this->fp = fsockopen($this->host, $this->port, $errno, $errstr);
if (!$this->fp) {
throw new Exception("$errstr ($errno)");
}
$this->checkReply(220);
$this->command("HELO {$this->cn}");
$this->checkReply(250);
if ($this->auth) {
$this->command('AUTH LOGIN');
$this->checkReply(334);
$this->command(base64_encode($this->username));
$this->checkReply(334);
$this->command(base64_encode($this->password));
$this->checkReply(235);
}
$this->command("MAIL FROM: <{$headers['from']}>");
$this->checkReply(250);
$this->command("RCPT to: <{$headers['to']}>");
$this->checkReply(250);
$this->command("DATA");
$this->checkReply(354);
$data = 'Date: ' . date('r') . "\r\n"
. 'To: ' . $headers['to'] . "\r\n"
. 'From: ' . $headers['from'] . "\r\n";
if ($headers['reply-to']) {
$data .= 'Reply-To: ' . $headers['reply-to'] . "\r\n";
}
$data .= 'Subject: ' . $headers['subject'] . "\r\n\r\n"
. $content;
$this->command($data, "\r\n.\r\n");
$this->checkReply(250);
$this->command('QUIT');
fclose($this->fp);
}
/**
* 功能 : 检查STMP服务器返回的代码是否和$code一样
*
* @param string/int $code
*/
protected function checkReply($code) {
$reply = fgets($this->fp, 128);
if (substr($reply, 0, 3) != $code) {
throw new Exception($reply);
}
}
/**
* 功能 : 执行STMP命令
*
* @param string $cmd
* @param string $end
*/
protected function command($cmd, $end="\r\n") {
fputs($this->fp, $cmd . $end);
}
}
分享到:
相关推荐
【标题】"louie.fyi:投资组合:books:" 是一个关于个人投资组合的项目,其中特别关注了书籍资源的分享。这个项目可能由路易斯·杰克贝尔创建,他可能是IT行业的专业人士,尤其是JavaScript领域。"books" 文件夹暗示...
【标题】:“传真组件 FYI FYI.CO_”可能指的是一个与传真传输相关的软件或服务组件,FYI(For Your Information)通常用于提供信息或告知。这个标题暗示我们可能会讨论一个用于发送、接收或者管理传真的IT解决方案...
【标题】"mrk.fyi::waving_hand:我的个人网站"揭示了这是一个关于个人网站的项目,很可能是一个程序员或技术爱好者用来展示自己的作品、经历和技术能力的在线平台。"mrk.fyi"可能是该网站的域名,简洁而易于记忆。 ...
代码库。 该站点的代码以MIT许可的形式分发。 网站内容(例如论文和照片材料)是Jocelyn Badgley和其他贡献者的版权,并已获得知识共享许可,署名Attribution-NonCommercial-ShareAlike(请参阅 )。...
fyi与g套件,slack,dropbox,box,Onedrive,Evernote和十几个 云应用程序。 特征: ✓在一个地方搜索和查找文档 ✓查看最近创建和更新的文档 ✓通过您使用的应用浏览文档 ✓支持每个应用连接多个帐户 ✓从浏览器...
邮件仅供参考 从 pak Sugi 获取主题为 fyi 的电子邮件并将其保存到谷歌网站
【标题】"erosen.fyi:我的博客"揭示了这是一个个人博客网站,很可能由作者Erosen创建并维护。这个博客是通过GitHub Pages服务进行托管的,这是一个流行的平台,允许用户免费发布静态网页。GitHub Pages通常用于展示...
在新标签页中,您可以在需要时直接访问所需的文档 FYI与Mac,Windows,G Suite,Slack,Dropbox,Box,OneDrive等连接。特点:✓从一个地方搜索您的文档✓一个活动提要,其中包含您所有最近的文档✓您可以添加任意...
标题“extinction-fyi:道格·贝尔肖(Doug Belshaw)记录的结束时间”暗示了这可能是一个关于环境问题,特别是与物种灭绝相关的项目。道格·贝尔肖(Doug Belshaw)可能是这个项目的发起人或主要贡献者,他可能在...
) git clone git@github.com:anstosa/ferry.fyi.git cd ferry.fyi npm install cp .env.sample .env.local并填写.env.local文件npm run migrate以初始化数据库在本地运行npm run client (在另一个终端中) npm ...
rfc.fyi 该站点使您可以立即搜索标题和关键字,并浏览带标记的RFC集合。 它的任务是使为IETF“内部人员”和普通公众更容易地找到合适的RFC。 使用新问题添加和维护RFC的集合; 请参阅我们的。
techlingo.fyi 这是什么意思? 您是否遇到过不知道是什么意思的单词或首字母缩略词? TechLingo.fyi在这里帮助您找到含义。贡献有两种方法可以贡献新术语,您可以在 GitHub 上创建一个新,或者如果您想自己动手操作...
:ballot_box_with_ballot: 立法权跑步yarn dev
臭鼬 该项目是共享所有项目的数据的地方 入门 您可以通过调用以下命令在本地设置该Rails应用程序: ./bin/setup 提交资料 为了将数据提交到您的本地实例,您可以这样做: ...启动服务器 运行命令: ...
世博会 tl; dr:这是一个通过简洁明了的链接将人们链接到markdown文件的工具,例如: : 它是什么? 该网站是一个有用的URL缩短器,用户可以使用它缩短...如何创建FYI? 前往 点击“创建新文件” 为它选择一个名
在使用FYI显示屏程序时,用户可以预览和编辑文本内容,调整字体、颜色、大小和滚动效果。此外,可能还支持导入图片和动画,以及创建定时播放列表,使得信息展示更加灵活多样。在连接到LED显示屏后,软件会通过串口、...
"或"FYI: Flower selection for July 19th event—please respond by Friday, July 7th"。 ### 二、邮件开头的写作技巧 1. **表明意图**:开头可以明确写明写邮件的目的,如"I’m writing to…",让收件人一目了然...
根据给定文件的信息,我们可以看出这是一本关于个人与职业发展的指南书——《FYI For Your Improvement》,由Michael M. Lombardo 和 Robert W. Eichinger编写并版权所有。该书详细介绍了多种职业技能,并提供了相应...
我们想要的网络 它是什么? 如果您建立网站,则不可避免地会遇到问题。 也许无法使用CSS实现设计的某个方面。...或在模板更改时自动构建: npx eleventy --watch 或在调试模式下: DEBUG=* npx eleventy