0

私はそれが私の頭の上にぶら下がって動作するようにするための期限によって悪化する問題を抱えています。次のコードは、古いWebサーバーで正常に実行されています。ただし、Amazon EC2に移動すると、呼び出されたページがそれを超えて開かなくなります(つまり、機能しません)。EC2でポート993が開いていることを確認しましたが、サーバーセットアップを初めて使用するため、何かが足りない可能性があります。

function downloadData($emailAddress, $reportUrl, $reportType)
{
    $result = "error";
    // DOWNLOAD DATA
    // the max time allows for the email to download
    set_time_limit(3000);

    // connect to gmail with your credentials
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    $username = $emailAddress; # e.g somebody@gmail.com
    $password = '*************';


    // try to connect
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error());


    /* get all new emails. If set to 'ALL' instead 
     * of 'NEW' retrieves all the emails, but can be 
     * resource intensive, so the following variable, 
     * $max_emails, puts the limit on the number of emails downloaded.
     * 
     */
    $emails = imap_search($inbox,'ALL');

    // useful only if the above search is set to 'ALL'
    $max_emails = 5;


    // if any emails found, iterate through each email
    if($emails)
        {
            $count = 1;

            // put the newest emails on top
            rsort($emails);

            // for every email...
            foreach($emails as $email_number) 
                {
                    // get information specific to this email
                    $overview = imap_fetch_overview($inbox,$email_number,0);

                    // get mail message
                    $message = imap_fetchbody($inbox,$email_number,2);

                    // get mail structure
                    $structure = imap_fetchstructure($inbox, $email_number);

                    $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'] = $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);

                                    // 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']);
                                        }
                                                //imap_delete($inbox,$email_number);
                                                imap_mail_move($inbox, $email_number,'[Gmail]/Bin');
                                        }
                                 }
                          }

                     // iterate through each attachment and save it
                     foreach($attachments as $attachment)
                        {
                            if($attachment['is_attachment'] == 1)
                                {
                                    // SCAN REPORT SET OUTSIDE OF FUNCTION
                                    $filename = $reportUrl;
                                    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.
                                    */
                                    $fp = fopen($filename, "w+");
                                    fwrite($fp, $attachment['attachment']);
                                    fclose($fp);
                                    $result = "success";
                                 }

                        }
                    if($count++ >= $max_emails) break;
                }
        } 
    // close the connection
    imap_close($inbox,CL_EXPUNGE);
    return $result;
}

そのようなエラーは発生しませんが(関数が呼び出された場所からページがロードされていないだけです)、コンソールは次のエラーを返します:500(内部サーバーエラー)

私が見逃しているかもしれない提案はありますか?

編集:次のコードが関数に含まれている場合にのみ、ページエラーが発生するようです。

        // try to connect
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error());

    // close the connection
    imap_close($inbox,CL_EXPUNGE);

私のec2セキュリティグループによると、正しいポート(993)が開いていますが、問題はポートであると私に示唆しています。このようなプロセスで開く必要のある他のポートはありますか?

4

1 に答える 1

0

EC2 が VPC 上にないことを確認してください。EC2 インスタンスが VPC 内にある場合。インターネットに接続するには特別な構成が必要です (NAT インスタンスなどを介して)。

最初に行うべきテストは、「EC2 インスタンスで ssh」を実行し、そこからポート 993 で Google にアクセスできるかどうかを確認することだと思います..imap.google.com で ping を試すことができます

于 2013-01-02T14:40:34.267 に答える