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. oracle lag与lead分析函数简介

    lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数我们可以取到当前行列的偏移N行列的值 lag可以看着是正的向上的偏移 lead可以认为负的向下的偏移 具体我们来看几个例子: 我们先看下 ...

  2. 1677: [Usaco2005 Jan]Sumsets 求和

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 626  Solved: 348[Submi ...

  3. 算法模板——AC自动机

    实现功能——输入N,M,提供一个共计N个单词的词典,然后在最后输入的M个字符串中进行多串匹配(关于AC自动机算法,此处不再赘述,详见:Aho-Corasick 多模式匹配算法.AC自动机详解.考虑到有 ...

  4. React 进修之路(2)

    生命周期 React中的组件被看成是一个有生命的个体,因此赋予了声明周期的概念,就是为了定义组件所处的状态 React中组件共分三大周期,11个阶段 创建期(少年,成长)组件创建时候进入的时期 get ...

  5. SBT使用阿里云Maven仓库,解决SBT下载依赖慢。

    添加:~/.sbt/repositories 文件 文件内容: [repositories] local my-maven-repo: http://maven.aliyun.com/nexus/co ...

  6. 2.4G无线收发模块/射频RFM75调试总结/RF知识整理

    射频RFM75通信是收发双方都需要编程的器件,收发双方的通道频率,空中传输速率设置一致,调试时必须先调通一块再调另一块,否则出现问题了就不知道是发送端有问题还是接收端有问题.调试必须理清思路.正确的方 ...

  7. Realm数据库的简单介绍和使用

    给大家介绍一个数据库操作的框架Realm,本文主要以iOS 平台的使用场景为例. realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android: ...

  8. h5 做app时和原生交互的小常识。

    距离上次随笔或许有半年了吧,最近在用hybrid模式开发移动app,所以就简单的说说用h5技术开发app时候,做原生交互的几个小常识: 一.拨打电话或者发送短信: <a href="t ...

  9. JDK中日期和时间的几个常用类浅析(四)

    java.time.Instant   java.time.Instant类对应的是时间线上的一个时间点.该类通过保存着从格林威治的起始时间(1970年一月一日零点零分)开始计算所经过的纳妙数来表示时 ...

  10. sql 语句写的行列转换

    以前面试老遇到一个行列转换的问题,今天没事,顺便记录一下 假设有这样一张表,如下图,创建表就不说了,直接建或者SQL语句都行 sql语句如下 --第一种 select name as 姓名, max( ...