Few days ago, I was looking for a script for my CRM (Customer Relationship Management) software that will simply forward all the emails received at a common address to their respective sales agent.
After few hrs I had successfully managed to write this script using PHP
In this script i am using PHPMAILER class in order to send emails and imap utility to fetch and read emails
<?php /* Author:Devi Techno Solutions Email : manish@devitechnosolutions.com */ require_once('class.phpmailer.php'); /* connect to Mailer Server to Read Emails */ $inbox = imap_open($imap_host_name,$imap_user_name,$imap_password) or die('Cannot connect to IMAP: ' . imap_last_error()); // Connect with SMTP to Send Emails $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 0; $mail->SMTPAuth = true; $mail->Host = $smtp_host; // Change these settings according to needs $mail->Port = $smtp_port; $mail->SMTPSecure = "ssl"; $mail->Username = $smtp_username; $mail->Password = $smtp_password; //Read all the Emails $emails = imap_search($inbox,'UNSEEN'); if($emails) { rsort($emails); foreach($emails as $email_number) { $overview = imap_fetch_overview($inbox,$email_number,0); $message = imap_fetchbody($inbox,$email_number,1.2); $structure = imap_fetchstructure($inbox,$email_number); $header = imap_headerinfo($inbox, $email_number); $attachments = array(); 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'] = $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'] = $object->value; } } } if($attachments[$i]['is_attachment']) { $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1); if($structure->parts[$i]->encoding == 3) { // 3 = BASE64 $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']); } elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']); } } } } $file_attachments = array(); if(count($attachments) != 0){ foreach($attachments as $at){ if($at[is_attachment]==1){ $fname = $at['filename']; $file_attachments[] = "attachments/$fname"; $fp = fopen("attachments/$fname","w"); fwrite($fp, $at['attachment']); fclose($fp); } } } $subject = $overview[0]->subject; $from = $overview[0]->from; $fromEmail = $header->from[0]->mailbox . "@" . $header->from[0]->host; $mail->SetFrom($fromEmail, $from); $mail->Subject = $subject; $body = $message; $mail->MsgHTML($body); $mail->AddAddress($recepeint_email_address, $recepeint_name); if(!empty($file_attachments)){ foreach($file_attachments as $file){ $mail->AddAttachment($file); } } $mail->Send(); } } ?>
Replace the following variables with their respective values
$imap_host_name = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; // eg '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; $imap_user_name = ''; $imap_password = ''; $smtp_host = 'smtp.gmail.com'; $smtp_username = ''; $smtp_password = ''; $smtp_port = '465'; $recepeint_email_address = 'goyalmanish47@gmail.com'; $recepeint_name = 'Manish Goyal';
Note: When you run this Script, Create a folder named attachment where all the attachments are downloaded and attach to email again
No comments:
Post a Comment