php imap gmail接收邮件。

2024-03-25 13:58
文章标签 php 邮件 接收 gmail imap

本文主要是介绍php imap gmail接收邮件。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<?php
require_once('../app/Mage.php');
//加载地址信息
$host = "{imap.gmail.com:993/imap/ssl}INBOX";
$user = "";
$pass = "";
$inbox = imap_open($host,$user,$pass) or die('Cannot connect to server: ' . imap_last_error());
//获取邮件number
$ri = 1;
$emails = imap_search($inbox,'ALL');
$email_total_array = array();
if($emails) {
    $output = '';
    rsort($emails);
    //遍历所有邮件。
    foreach($emails as $email_number) {
        $ri++;
        if($ri>6){break;}
        //得到structure、
        $email_array = array();
        $structure = imap_fetchstructure($inbox, $email_number);
        $message = "";
        $tt = 0;
        //得到message
        if(isset($structure->parts) && is_array($structure->parts) && isset($structure->parts[1])) {
            $part = $structure->parts[1];
            $message = imap_fetchbody($inbox,$email_number,1.2);
            if($message == ""){
                $message = imap_fetchbody($inbox,$email_number,2);
            }else{
                $tt = 1;
            }
            $coding = $part->encoding;
            if($tt == 0){
                if ($coding == 0)
                {
                    $message = $message;
                }
                elseif ($coding == 1)
                {
                    $message = $message;
                }
                elseif ($coding == 2)
                {
                    $message = $message;
                }
                elseif ($coding == 3)
                {
                    $message = imap_base64($message);
                }
                elseif ($coding == 4)
                {
                    $message = imap_qprint($message);
                }
                elseif ($coding == 5)
                {
                    $message = $message;
                }
            }
            //echo "<br>^^<br>".$message."<br/>$$<br>";
            //echo "<img src=".$message.">";
        }
        //得到邮件的标头部分:是否已读,发件人,日期,标题。
        
        $header = imap_headerinfo($inbox, $email_number);
        $fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;
        echo $fromaddr."##<br>";

        $overview = imap_fetch_overview($inbox,$email_number,0);
        $sender = imap_utf8($overview[0]->from);
        $seen = $overview[0]->seen ? 'read' : 'unread';
        $date = $overview[0]->date;
        $subject = imap_utf8($overview[0]->subject);
        $SendEmailAddress = $fromaddr;
        
        echo $sender."**<br/>";
        //得到message的字符编码。
        if($tt == 0){
            $encodedd = mb_detect_encoding($message, array('UTF-8','US-ASCII','GB2312', 'ISO-8859-1','ISO-8859-2','ISO-8859-4','ISO-8859-5','ISO-8859-6','ISO-8859-7','ISO-8859-8','ISO-8859-9','ISO-8859-10','ISO-2022-JP','ISO-2022-KR'));
            //进行转码。
            
            if($encodedd == "EUC-CN"){
                $message= iconv("GB2312", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-1"){
                $message= iconv("ISO-8859-1", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-2"){
                $message= iconv("ISO-8859-2", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-4"){
                $message= iconv("ISO-8859-4", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-5"){
                $message= iconv("ISO-8859-5", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-6"){
                $message= iconv("ISO-8859-6", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-7"){
                $message= iconv("ISO-8859-7", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-8"){
                $message= iconv("ISO-8859-8", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-9"){
                $message= iconv("ISO-8859-9", "UTF-8", $message);
            }else if($encodedd == "ISO-8859-10"){
                $message= iconv("ISO-8859-10", "UTF-8", $message);
            }else if($encodedd == "ISO-2022-JP"){
                $message= iconv("ISO-2022-JP", "UTF-8", $message);
            }else if($encodedd == "ISO-2022-KR"){
                $message= iconv("ISO-2022-KR", "UTF-8", $message);
            }else{
                $message= $message;
            }    
        }else{
            $message= $message;
        }
        //邮箱信息保存到数组。
        

        //加载附件
        $attachments = array();
        /* if any attachments found... */
        if(isset($structure->parts) && count($structure->parts))
        {
            for($i = 0; $i < count($structure->parts); $i++)
            {
                $attachments[$i] = array(
                    'is_attachment' => false,
                    'filename' => '',
                    'name' => '',
                    'attachment' => ''
                );
            
                if($structure->parts[$i]->ifdparameters)
                {
                    foreach($structure->parts[$i]->dparameters as $object)
                    {
                        if(strtolower($object->attribute) == 'filename')
                        {
                            $attachments[$i]['is_attachment'] = true;
                            $attachments[$i]['filename'] = imap_utf8($object->value);
                        }
                    }
                }
            
                if($structure->parts[$i]->ifparameters)
                {
                    foreach($structure->parts[$i]->parameters as $object)
                    {
                        if(strtolower($object->attribute) == 'name')
                        {
                            $attachments[$i]['is_attachment'] = true;
                            $attachments[$i]['name'] = imap_utf8($object->value);
                        }
                    }
                }
            
                if($attachments[$i]['is_attachment'])
                {
                    $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
                    
                    /* 4 = QUOTED-PRINTABLE encoding */
                    if($structure->parts[$i]->encoding == 3)
                    {
                        $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                    }
                    /* 3 = BASE64 encoding */
                    elseif($structure->parts[$i]->encoding == 4)
                    {
                        $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                    }
                }
            }
        }
        
        /* iterate through each attachment and save it */
        $atta_array = array();
        foreach($attachments as $attachment)
        {
            if($attachment['is_attachment'] == 1)
            {
                    $filename = $attachment['name'];
                    if(empty($filename)) $filename = $attachment['filename'];
                
                    if(empty($filename)) $filename = time() . ".dat";
                
                    /* prefix the email number to the filename in case two emails
                    * have the attachment with the same file name.
                    */
                    $l_filename = $filename;
                    $file_hz = strrev(substr(strrev($filename),0,4));
                    $datatimes = date('Y-m-d-G-i-s', time());
                    //$datatimes = str_replace(" ","-",$datatimes);
                    $datatimes = $email_number."-".$datatimes;

                    $filename =  $datatimes.$file_hz;
                    $file_dir =  "file/".$filename;
                    $atta_array[] = array("filename"=>$filename,"filealiases"=>$l_filename,"filedir"=>$file_dir);
                    //win 7下面的文件编码都是gb2312,所以需要转换编码。
                    // $filename = iconv("UTF-8", "GB2312",$filename);
                    //echo $l_filename;  
                    $fp = fopen("./".$file_dir, "w+");
                    fwrite($fp, $attachment['attachment']);
                    fclose($fp);
            }
        
        }
        //var_dump($atta_array);
        $email_total_array[] = array("attament"=>$atta_array ,"email_number"=>$email_number,"seen"=>$seen,"date"=>$date,"sender"=>$sender,"subject"=>$subject,"message"=>$message,"SendEmailAddress"=>$SendEmailAddress);

        //$email_total_array['attament'] = $atta_array;


    }
         加载附件代码结束。
    
    //把信息写入到数据库中。
    $app = Mage::app();
    foreach($email_total_array as $ea){
        $n_sender = $ea['sender'];
        if(strstr($n_sender," <")){
            $e_sender = substr($n_sender,0,strpos($n_sender," <"));
        }else{
            $e_sender = $n_sender;
        }
        $email_list = Mage::getModel("email/list");
        $email_list->setEmailMessageNo($ea['email_number']);
        $email_list->setSendEmailAddress($ea['SendEmailAddress']);
        $email_list->setEmailSender($e_sender);
        $email_list->setReceiveEmailAddress($user);
        $email_list->setEmailSendTime($ea['date']);
        $email_list->setEmailTitle($ea['subject']);
        $email_list->setEmailContent($ea['message']);
        $email_list->setOrderNo();
        $email_list->setCustomerService();
        $email_list->setOrderStyle();
        $email_list->setLanguage();
        $email_list->setOrderTotal();
        $email_list->setCaseStatus();
        $email_list->save();
        $email_id = $email_list->getId();//
        $attament = $ea['attament'];
        foreach($attament as $aa){
            $filename = $aa['filename'];//
            $filealiases = $aa['filealiases'];//
            $filedir = $aa['filedir'];//
            //保存
            $email_attachment = Mage::getModel("email/attachment");
            $email_attachment->setEmailId($email_id);
            $email_attachment->setAttachmentName($filename);
            $email_attachment->setAttachmentAliases($filealiases);
            $email_attachment->setAttachmentDir($filedir);
            $email_attachment->save();
        }
        
    }
    
}

imap_close($inbox);
?>

这篇关于php imap gmail接收邮件。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845231

相关文章

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修