1.PHP程序员玩转Linux系列-怎么安装使用CentOS

2.PHP程序员玩转Linux系列-lnmp环境的搭建

3.PHP程序员玩转Linux系列-搭建FTP代码开发环境

4.PHP程序员玩转Linux系列-备份还原MySQL

5.PHP程序员玩转Linux系列-自动备份与SVN

6.PHP程序员玩转Linux系列-Linux和Windows安装nginx

7.PHP程序员玩转Linux系列-nginx初学者引导

8.PHP程序员玩转Linux系列-Nginx中的HTTPS

9.PHP程序员玩转Linux系列-使用supervisor实现守护进程

10.PHP程序员玩转Linux系列-升级PHP到PHP7

邮箱是工作中非常重要的一个工具,平常我都是使用foxmail软件或者直接登录web来操作邮件,现在我要换种方式使用邮箱.使用邮箱都是通过pop协议收取邮件,使用smtp协议发送邮件,现在我就直接在命令行中来操作一下邮箱.

pop服务器非SSL加密,一般的端口是110,例如:pop3.sina.net  端口:110

telnet pop3.sina.net 

使用USER指令,指定邮箱名

USER shihan2@appdev.sinanet.com

使用PASS指令,指定密码

PASS 密码xxx

使用STAT指令,查看邮箱统计,前一个是邮件数,后一个是邮件所占的空间大小

STAT

使用LIST指令,列出邮件列表,前一个是邮件的编号,后一个是该邮件所占的大小

LIST

使用RETR指令,读取邮件详情,RETR 编号,读出来的就是信体内容了

RETR 

使用smtp发送邮件

使用如下命令

telnet smtp.sina.cn
ehlo sina.cn
auth login
xxxxxxxxxxxxxxxxxxxx== #base64加密的邮箱
MjAzOTQ0LmNvbQ== #base64加密的密码
mail from:<shihan@appdev.sinanet.com> #发件人
rcpt to:<@qq.com> #收件人
data
To:@qq.com
From:shihan@appdev.sinanet.com
Subject:测试一下telnet发邮件 测试一下telnet发邮件测试一下telnet发邮件 . #这个必须有

PHP代码实现收发信

<?php
try {
define('PATH', dirname(__FILE__).'/emails/');
//pop协议读取下载邮件
$pop=new Pop();
echo $pop->connect("pop3.sina.net",110);
echo $pop->user("shihan2@appdev.sinanet.com");
echo $pop->pass("xxxx");
echo $pop->stat();
$pop->download($pop->lists()); //smtp协议发邮件
$dir = dir(PATH);
while($file = $dir->read()){
if($file=="."|| $file==".."){
continue;
}
$smtp=new Smtp();
echo $smtp->connect("smtp.sina.net",25);
echo $smtp->helo("shihan2@appdev.sinanet.com");
echo $smtp->auth();
echo $smtp->user();
echo $smtp->pass("xxxx");
echo $smtp->mailFrom("shihan2@appdev.sinanet.com");
echo $smtp->rcpt("shihan2@appdev.sinanet.com");
echo $smtp->data();
echo $smtp->send(file_get_contents(PATH.$file));
}
} catch (Exception $e) {
echo $e->getMessage();
}
class Pop{
private $socket;
public function __construct(){
ini_set('memory_limit', '200M');
ini_set("auto_detect_line_endings", true);
}
public function connect($popServer,$popPort){
$res=@fsockopen("tcp://".$popServer,$popPort,$errno,$errstr);
if(!$res){
throw new Exception($errstr, $errno);
}
$this->socket=$res;
return $this->readLine();
}
public function user($email){
$user="USER {$email}\r\n";
fwrite($this->socket,$user);
return $this->readLine();
}
public function pass($pwd){
$pass="PASS {$pwd}\r\n";
fwrite($this->socket,$pass);
return $this->readLine();
}
public function lists(){
fwrite($this->socket,"LIST\r\n");
$lists=$this->read();
return $this->parseList($lists);
}
public function retr($id){
fwrite($this->socket,"RETR {$id}\r\n");
return $this->read();
}
public function stat(){
fwrite($this->socket,"STAT\r\n");
return $this->readLine();
}
public function read() {
$buf="";
while ($ln = $this->readLine()) {
if (trim($ln) == '.') {
break;
}
$buf .= $ln;
}
return $buf;
}
public function download($emails){
foreach ($emails as $key => $email) {
$name=$email['id'].".eml";
if(!is_dir(PATH)){
mkdir(PATH,0777);
}
$path=PATH.$name;
if(file_exists($path)){
continue;
}
echo "{$name} email is downloading... \r\n";
$file=$this->retr($email['id']);
file_put_contents($path, $file);
echo "{$name} email is ok! \r\n";
}
}
public function readLine(){
$result="";
while(true){
$buffer=@fgets($this->socket,10);
$n = strlen($buffer);
$result.=$buffer;
if (!$n) {
break;
}
if ($buffer[$n - 1] == "\n") {
break;
}
}
return $result;
}
private function parseList($list){
$result=array();
$emails=explode("\n", $list);
foreach ($emails as $key => $v) {
$emailId=explode(" ", $v);
if(!is_array($emailId)||$emailId[0]=='+OK'||!isset($emailId[0])||!isset($emailId[1])){
continue;
}
if($emailId[0][0]=='.'){
break;
}
$temp=array();
$temp['id']=$emailId[0];
$temp['size']=$emailId[1];
$result[]=$temp;
}
return $result;
}
}
class Smtp{
private $socket;
private $email;
public function __construct(){
ini_set('memory_limit', '200M');
ini_set("auto_detect_line_endings", true);
}
public function connect($smtpServer,$smtpPort){
$res=@fsockopen("tcp://".$smtpServer,$smtpPort,$errno, $errstr);
if(!$res){
throw new Exception($errstr, $errno);
}
$this->socket=$res;
return $this->readLine();
}
public function helo($email){
$user="HELO {$email}\r\n";
fwrite($this->socket,$user);
$this->email=$email;
return $this->readLine();
}
public function auth(){
$pass="AUTH LOGIN\r\n";
fwrite($this->socket,$pass);
return $this->readLine();
}
public function user(){
$pass=base64_encode($this->email)."\r\n";
fwrite($this->socket,$pass);
return $this->readLine();
}
public function pass($pwd){
$pass=base64_encode($pwd)."\r\n";
fwrite($this->socket,$pass);
return $this->readLine();
}
public function mailFrom($from){
$data="MAIL FROM:<{$from}>\r\n";
fwrite($this->socket,$data);
return $this->readLine();
}
public function rcpt($rcpt){
$data="RCPT TO:<{$rcpt}>\r\n";
fwrite($this->socket,$data);
return $this->readLine();
}
public function data(){
$email="data\r\n";
fwrite($this->socket,$email);
return $this->readLine();
}
public function send($data){
$email="{$data}\r\n";
$email.=".\r\n";
fwrite($this->socket,$email);
return $this->readLine();
}
public function read() {
$buf="";
while ($ln = $this->readLine()) {
if (trim($ln) == '.') {
break;
}
$buf .= $ln;
}
return $buf;
}
public function readLine(){
$result="";
while(true){
$buffer=@fgets($this->socket,10);
$n = strlen($buffer);
$result.=$buffer;
if (!$n) {
break;
}
if ($buffer[$n - 1] == "\n") {
break;
}
}
return $result;
} }

[Linux] PHP程序员玩转Linux系列-telnet轻松使用邮箱的更多相关文章

  1. [Linux] PHP程序员玩转Linux系列-lnmp环境的搭建

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 在平常的工作中,我作为PHP程序员经常要搭建一下环境,这个环境就是Linux系统下安装nginx,php,mysql这三个软件,对软件进行 ...

  2. [Linux] PHP程序员玩转Linux系列-搭建代码开发环境

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 有些同学可能觉得我写的都是啥yum安装的,随便配置一下而已,没啥技术含量,我的目的 ...

  3. [Linux] PHP程序员玩转Linux系列-备份还原MySQL

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 前几天有个新闻,说是g ...

  4. [Linux] PHP程序员玩转Linux系列-自动备份与SVN

    我的代码经常在开发修改,为了代码的安全性,比如哪天误删了文件,或者哪天改错东西了,可以恢复回来,我要搞代码备份.备份代码,我先做最简单的,使用linux的定时机制加shell命令打包文件,每天按日期保 ...

  5. [Linux] PHP程序员玩转Linux系列-nginx初学者引导

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  6. [Linux] PHP程序员玩转Linux系列-Linux和Windows安装nginx

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  7. [Linux] PHP程序员玩转Linux系列-Nginx中的HTTPS

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  8. [Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  9. [Linux] PHP程序员玩转Linux系列-升级PHP到PHP7

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

随机推荐

  1. Java日志工具之java.util.logging.Logger

    今天总结下JDK自带的日志工具Logger,虽然它一直默默无闻,但有时使用它却比较方便.更详细的信息可以查看JDK API手册,本文只是简单示例入门. 创建Logger 我们可以使用Logger的工厂 ...

  2. 弹出层js要这样加才不会失效

    $('body').on('click','.check_eln',function(){    $('#eln_show').toggleClass('hidden'); });

  3. Java面试12|Linux及Shell脚本

    1. 随便写一个awk的命令.用awk统计文本行数 (1)最近登录的5个帐号 last -n 5 | awk -F ':'(指定域分割符号) '{print $1}' 读入有'\n'换行符分割的一条记 ...

  4. KoaHub平台基于Node.js开发的Koa的调试实用程序

    debug small debugging utility debug tiny node.js debugging utility modelled after node core's debugg ...

  5. gzip 与 gunzip 语法与示例

    gzip 与 gunzip 语法与示例 语法: gunzip -c 被压缩的文件 > 已解压的文件示例: 将 catalina.out.gz 文件解压到 catalina.out 文件中: gu ...

  6. MyBatis极速入门开发手册(2017-2-6更新)

    前言: 本篇文章对我的学习内容做一个归纳梳理,同时也记录一些学习过程中遇上的问题及注意事项等等,可以帮助新入门的朋友们消除一些误区与盲区,希望能帮上一些正在学习的朋友们.在编写时会引用一些mybati ...

  7. 第一章 开发简单Java应用程序

    1. 什么是程序?     程序一词来自生活,通常指完成某些事务的一种既定方式和过程(一组有序指令的集合). 2. Java的三个领域? Java SE:java技术核心(指桌面应用程序)如:QQ.百 ...

  8. JavaScript 方法调用模式和函数调用模式

    这两天在读<JavaScript语言精粹>关于第4章函数调用的几种模式琢磨了半天. 这里就说一下方法调用模式跟函数调用模式. 方法调用模式: 当一个函数被保存为对象的一个属性时,我们称它为 ...

  9. iOS打包后收不到推送信息

    今天遇到的一个特别神奇的问题: 应用在测试环境下打的包收不到推送了,打包之后都没有推送,但是我真机测试又是可以收到推送消息的.经过好久才找到原因,感觉很坑.这里记录一下问题: 1.由于我的推送第三方使 ...

  10. IOS开发创建开发证书及发布App应用(五)——编译应用

    5.编译应用 最近升级ios7,一直没有时间写,终于搞完了,完成之前没有完成的工作 由于适配ios7,所以Xcode也升级到5了,所以下面截图基本在Xcode5上,以前的版本基本也差不多的 打开项目的 ...