7
A
回答
10
您必須啓用您的Gmail帳戶(設置→轉發和POP/IMAP)IMAP訪問,然後用imaplib.IMAP4_SSL
來訪問它。
使用每條消息的原始文本作爲email.message_from_string
的參數以處理任何附件。
0
爲imap_open PHP的文檔講解連接在評論到Gmail(例如,10月31日,2007 07:50):
$mbox = imap_open("{imap.gmail.com:993/imap/ssl}INBOX", "[email protected]", "password") or die("can't connect: " . imap_last_error());
其中,很明顯,你必須填寫實際的用戶名和密碼爲適當,然後找出你遵循指示電子郵件的部分附件:http://www.electrictoolbox.com/extract-attachments-email-php-imap/
其中,總結,說你使用:
// in a for($i=1;$i<$nummsgs;$i++) loop over all the messages in the inbox $structure = imap_fetchstructure($mbox, $i);
識別結構中的附件。然而,這是一個相當複雜的解構MIME消息的過程(它有很多必須考慮的可選變量),所以這個函數的基礎/輪廓就在這個電子工具箱頁面中。
2
我發現了一些可行的代碼!這將下載任何附件到選定的文件夾
<?php
$gmail_username = '[email protected]';
$gmail_password = 'mypassword';
$imap = imap_open ("{imap.gmail.com:993/imap/ssl}INBOX", $gmail_username, $gmail_password) or die("can't connect: " . imap_last_error());
$savefilepath = 'path/to/images_folder/'; //absolute path to images directory
$imagefilepath = 'images/'; //relative path to images directory
$headers = imap_headers($imap);
foreach ($headers as $mail) {
$flags = substr($mail, 0, 4);
//Check for unread msgs, get their UID, and queue them up
if (strpos($flags, "U")) {
preg_match('/[0-9]+/',$mail,$match);
$new_msg[] = implode('',$match);
}
}
if ($new_msg) {
foreach ($new_msg as $result) {
$structure = imap_fetchstructure($imap,$result);
$parts = $structure->parts;
foreach ($parts as $part) {
if ($part->parameters[0]->attribute == "NAME") {
//Generate a filename with format DATE_RANDOM#_ATTACHMENTNAME.EXT
$savefilename = date("m-d-Y") . '_' . mt_rand(rand(), 6) . '_' . $part->parameters[0]->value;
save_attachment(imap_fetchbody($imap,$result,2),$savefilename,$savefilepath,$savethumbpath);
imap_fetchbody($imap,$result,2); //This marks message as read
}
}
}
}
imap_close($imap);
function save_attachment($content , $filename , $localfilepath, $thumbfilepath) {
if (imap_base64($content) != FALSE) {
$file = fopen($localfilepath.$filename, 'w');
fwrite($file, imap_base64($content));
fclose($file);
}
}
?>
3
我拿上面的代碼,並修復它並測試它。它適用於PHP5。
<?php
$gmail_username = '[email protected]';
$gmail_password = 'password';
$imap = imap_open ("{imap.gmail.com:993/imap/ssl}INBOX", $gmail_username, $gmail_password) or die("can't connect: " . imap_last_error());
$savefilepath = '//Server/share/Local/Pathname/'; //absolute path to images directory
$imagefilepath = '/Local/Pathname/'; //relative path to images directory
$savethumbpath = '/Local/Pathname/'; //relative path to images directory
$headers = imap_headers($imap);
foreach ($headers as $mail) {
$flags = substr($mail, 0, 4);
//Check for unread msgs, get their UID, and queue them up
if (strpos($flags, "U")) {
preg_match('/[0-9]+/',$mail,$match);
$new_msg[] = implode('',$match);
}
}
if ($new_msg) {
foreach ($new_msg as $result) {
$structure = imap_fetchstructure($imap,$result);
$parts = $structure->parts;
foreach ($parts as $part) {
if ($part->parameters[0]->attribute == "NAME") {
//Generate a filename with format DATE_RANDOM#_ATTACHMENTNAME.EXT
$savefilename = date("m-d-Y") . '_' . rand() . '_' . $part->parameters[0]->value;
save_attachment(imap_fetchbody($imap,$result,2),$savefilename,$savefilepath,$savethumbpath);
imap_fetchbody($imap,$result,2); //This marks message as read
}
}
}
}
/* grab emails */
$emails = imap_search($imap,'ALL');
/* if emails are returned, cycle through each... */
if($emails) {
/* put the newest emails on top */
$total = imap_num_msg($imap);
/* for every email... */
for($i = $total; $i >= 1; $i--) {
$headers = imap_header($imap, $i);
$from = $headers->from[0]->mailbox . "@" . $headers->from[0]->host;
echo $from . "\n";
imap_delete($imap,$i);
imap_mail_move($imap,"$i:$i", "[Gmail]/Trash"); // Change or remove this line if you are not connecting to gmail. The path to the Trash folder in your Gmail may be different, capitalization is relevant.
}
}else{
echo "no emails";
}
/* close the connection */
imap_expunge($imap);
imap_close($imap);
function save_attachment($content , $filename , $localfilepath, $thumbfilepath) {
if (imap_base64($content) != FALSE) {
$file = fopen($localfilepath.$filename, 'w');
fwrite($file, imap_base64($content));
fclose($file);
}
}
?>
0
I recently worked on this topic and here is the code which works well. It also saves the details of the attachments in a word document with the following details:
-> Date
-> Time
-> From
-> Email ID
-> Subject
<?php
/*
* Gmail attachment extractor.
*
* Downloads attachments from Gmail and saves it to a file.
* Uses PHP IMAP extension, so make sure it is enabled in your php.ini,
* extension=php_imap.dll
*
*/
header('Content-type:application\msword');
header('Content-Disposition:attachment;Filename=document_name.doc');
set_time_limit(0);
/* connect to gmail with your credentials */
$hostname = '{imap.googlemail.com:993/imap/ssl}INBOX';
$username = '[email protected]';
$password = 'password';
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to
Gmail: ' . 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 = 110;
/* 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);
$check=imap_check($inbox);
$result=imap_fetch_overview($inbox,"1:{$check->Nmsgs}",0);
foreach($result as $overview){
echo "#{$overview->msgno}({$overview->date})-From: {$overview->from}
{$overview->subject}\n"}
/* get mail message */
$message = imap_fetchbody($inbox,$email_number,2);
/* get mail structure */
$structure =imap_fetchstructure($inbox, $email_number);
//$functions = array('function1' => imap_fetchstructure($inbox,
$email_number));
//print_r(array_keys($functions));
$attachments = array();
//print_r(array_keys($attachments[$i]));
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']);
}
}
}
}
/* iterate through each attachment and save it */
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.
*/
$fp = fopen($email_number . "-" . $filename, "w+");
fwrite($fp, $attachment['attachment']);
fclose($fp);
}
}
if($count++ >= $max_emails) break;
}
}
/* close the connection */
imap_close($inbox);
?>
相關問題
- 1. 通過python從gmail獲取電子郵件
- 2. 從php下載gmail附件
- 3. 通過PHP IMAP獲取Gmail標籤?
- 4. 通過Powershell從ServiceNow INC獲取附件
- 5. 使用InboxSDK獲取附件並通過Gmail API發送
- 6. 從Gmail獲取電子郵件到PHP
- 7. 從Gmail獲取新的郵件通知?
- 8. 在GMail API中獲取附件
- 9. Gmail Python多個附件
- 10. 直接從服務器獲取gmail附件而不使用imap
- 11. 錯誤以文本形式從Gmail獲取pdf附件
- 12. 通過API獲取Gmail帳戶上的可用空間python
- 13. 通過Gmail郵件插件獲取電子郵件內容
- 14. Python:通過gmail發送郵件問題
- 15. 如何從Yahoo或Gmail獲取HTTP_REFERER
- 16. PHP - 通過Gmail發送郵件?
- 17. 通過Python從MSSQL獲取數據
- 18. 獲取Gmail所有文件夾IMAP PHP
- 19. 通過category_name從PHP中獲取到Android
- 20. 通過PHP從MySQL獲取FLOT數據?
- 21. 通過Windows-8中的Web服務獲取或讀取SharePoint的附件
- 22. Python - 如何通過代理通過POP或IMAP獲取電子郵件?
- 23. 發送郵件附件通過PHP PEAR
- 24. PHP電子郵件附件不通過
- 25. 附加文件通過PHP郵件
- 26. 通過SMTP從GMail或Yahoo帳戶發送電子郵件
- 27. 從QC獲取附件
- 28. 從Outlook獲取附件
- 29. 從郵件附件上傳通過回形針或Carrierwave文件
- 30. 如何使用API從Gmail收件箱獲取完整郵件和附件?
我已經添加到「我怎麼可以下載所有的電子郵件與Gmail附件?」 – jfs 2009-03-18 00:12:51