Forwarding emails with a PHP script

后端 未结 5 527
醉话见心
醉话见心 2021-01-05 01:58

We have a cron\'ed PHP script that checks an inbox every ten minutes. The purpose of this script is to handle \"STOP to quit\" functionality for our SMS notification service

5条回答
  •  执笔经年
    2021-01-05 02:51

    I coded this method a long time ago to parse an email message into their appropriate parts using IMAP:

    function Message_Parse($id)
    {
        if (is_resource($this->connection))
        {
            $result = array
            (
                'text' => null,
                'html' => null,
                'attachments' => array(),
            );
    
            $structure = imap_fetchstructure($this->connection, $id, FT_UID);
    
            if (array_key_exists('parts', $structure))
            {
                foreach ($structure->parts as $key => $part)
                {
                    if (($part->type >= 2) || (($part->ifdisposition == 1) && ($part->disposition == 'ATTACHMENT')))
                    {
                        $filename = null;
    
                        if ($part->ifparameters == 1)
                        {
                            $total_parameters = count($part->parameters);
    
                            for ($i = 0; $i < $total_parameters; $i++)
                            {
                                if (($part->parameters[$i]->attribute == 'NAME') || ($part->parameters[$i]->attribute == 'FILENAME'))
                                {
                                    $filename = $part->parameters[$i]->value;
    
                                    break;
                                }
                            }
    
                            if (is_null($filename))
                            {
                                if ($part->ifdparameters == 1)
                                {
                                    $total_dparameters = count($part->dparameters);
    
                                    for ($i = 0; $i < $total_dparameters; $i++)
                                    {
                                        if (($part->dparameters[$i]->attribute == 'NAME') || ($part->dparameters[$i]->attribute == 'FILENAME'))
                                        {
                                            $filename = $part->dparameters[$i]->value;
    
                                            break;
                                        }
                                    }
                                }
                            }
                        }
    
                        $result['attachments'][] = array
                        (
                            'filename' => $filename,
                            'content' => str_replace(array("\r", "\n"), '', trim(imap_fetchbody($this->connection, $id, ($key + 1), FT_UID))),
                        );
                    }
    
                    else
                    {
                        if ($part->subtype == 'PLAIN')
                        {
                            $result['text'] = imap_fetchbody($this->connection, $id, ($key + 1), FT_UID);
                        }
    
                        else if ($part->subtype == 'HTML')
                        {
                            $result['html'] = imap_fetchbody($this->connection, $id, ($key + 1), FT_UID);
                        }
    
                        else
                        {
                            foreach ($part->parts as $alternative_key => $alternative_part)
                            {
                                if ($alternative_part->subtype == 'PLAIN')
                                {
                                    echo '

    ' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '

    '; $result['text'] = imap_fetchbody($this->connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID); } else if ($alternative_part->subtype == 'HTML') { echo '

    ' . $alternative_part->subtype . ' ' . $alternative_part->encoding . '

    '; $result['html'] = imap_fetchbody($this->connection, $id, ($key + 1) . '.' . ($alternative_key + 1), FT_UID); } } } } } } else { $result['text'] = imap_body($this->connection, $id, FT_UID); } $result['text'] = imap_qprint($result['text']); $result['html'] = imap_qprint(imap_8bit($result['html'])); return $result; } return false; }

    I've never tested it deeply and I'm sure it has some bugs, but it might be a start... After adapting this code you should be able to use the $result indexes (text, html, attachments) with your forwarding script (using SwiftMailer for instance), without worrying about keeping the MIME boundaries intact.

提交回复
热议问题