Как получить электронную почту и вложения из PHP

Я пишу фотогалерею webapp для свадьбы друга, и они хотят, чтобы галерея фотографий предоставляла цифровые фотографии, которые они снимают в день.

Оценив все варианты, я решил, что для пользователей проще всего будет использовать знакомый интерфейс (их электронную почту) и просто отправить их в виде вложений.

Я создал почтовый ящик, но теперь мне нужно подключить и загрузить эти вложения для автоматической обработки для добавления в систему галереи. Но как? Есть ли какие-либо учебники или классы prefab, которые вы видели для этого?

Related of "Как получить электронную почту и вложения из PHP"

Какой MTA вы используете? Если вы используете postfix + maildrop, вы можете создать правило фильтрации, которое передает определенные сообщения через PHP-скрипт, который затем обрабатывает входящие письма. (google для maildrop и xfilter ).

Раньше я делал многое из этого, но я не могу найти код, вот небольшая версия, которую я нашел. Это должно привести вас к правильному пути. Раньше я запускал этот тип скрипта из cronjob. Извините, я не могу найти окончательную версию. ; (

 // Open pop mailbox if (!$mbox = imap_open ("{localhost:110/pop3/notls}INBOX", "user", "tester")) { die ('Cannot connect/check pop mail! Exiting'); } if ($hdr = imap_check($mbox)) { $msgCount = $hdr->Nmsgs; } else { echo "Failed to get mail"; exit; } $MN=$msgCount; $overview=imap_fetch_overview($mbox,"1:$MN",0); for ($X = 1; $X <= $MN; $X++) { $file = imap_fetchbody($mbox, $X, 1); imap_delete($mbox, $X); } imap_expunge($mbox); imap_close($mbox); 

Удачи!

Вы считали, что используете Веб-альбомы Picasa Google? Вы можете настроить адрес электронной почты, чтобы отправлять фотографии и делиться ими в Интернете. Затем вы можете получить RSS-фид этих фотографий, которые большинство программистов более знакомы с MTA.

Если вы создаете для этой цели специальный почтовый ящик, использование механизма фильтрации почти наверняка не то, что вы хотите. Вместо этого вы хотите, чтобы почтовый ящик был подключен к приложению, и приложение просто читается в сообщении от stdin, разбирает тело, а MIME анализирует тело, чтобы получить вложения.

Наличие почтового ящика – это канал, поддерживаемый всеми известными MTA, основанными на unix, например sendmail, postfix и qmail. Как правило, вы определяете его в своем файле псевдонимов, например:

# sendmail или постфиксный синтаксис
msgsubmit: "| / usr / bin / php ~ path / to / example.php"

Затем письма в msgsubmit @ отправляются в программу php для доставки.

Это имеет то преимущество, что вы не полагаетесь на сервер IMAP или на любой другой сервер, находящийся за пределами MTA, и он отлично работает, пока вы контролируете MTA хоста назначения. Фильтрация – это то, что вы хотели бы, если бы вы хотели, чтобы все сообщения в системе проверялись сценарием, и я предполагаю, что это не так.

Если вы хотите, чтобы копия, хранящаяся в почтовом ящике где-нибудь (не плохая идея), просто определите псевдоним, чтобы перейти на несколько адресов, например:

 msgsubmit: "| /usr/bin/php ~path/to/example.php", msgsubmit-box 

Или постфиксный виртуальный формат:

 msgsubmit "| /usr/bin/php ~path/to/example.php" msgsubmit-box 

Я думаю, вам нужен синтаксический анализатор MIME.

Я использовал это раньше, и кажется, что он работает нормально, хотя я не тестировал его на действительно большие приложения (т. Е. Файлы размером 2-3 МБ, которые вы могли бы получить с цифровых камер).

У вас уже есть система для чтения почтовых ящиков POP3 / IMAP? На том же сайте есть еще один класс, который также работает на POP3 (я считаю, что есть также IMAP). Однако, если вы загружаете справедливый объем, возможно, вам захочется исследовать несколько решений на основе C, поскольку я считаю, что один – чистый PHP.

Majordomo , может быть альтернативой обработке писем, но есть некоторые ограничения на обработку файлов.

 <?php //make sure that submit button name is 'Submit' if(isset($_POST['Submit'])){ $name = $_POST['visitorname']; $email = $_POST['visitoremail']; $message = $_POST['visitormessage']; $to="youremail@yourdomain.com"; $subject="From ".$name; $from = $email; // generate a random string to be used as the boundary marker $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; // now we'll build the message headers $headers = "From: $from\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: multipart/mixed;\r\n" . " boundary=\"{$mime_boundary}\""; // next, we'll build the invisible portion of the message body // note that we insert two dashes in front of the MIME boundary // when we use it $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; foreach($_FILES as $userfile) { // store the file information to variables for easier access $tmp_name = $userfile['tmp_name']; $type = $userfile['type']; $name = $userfile['name']; $size = $userfile['size']; // if the upload succeded, the file will exist if (file_exists($tmp_name)) { // check to make sure that it is an uploaded file and not a system file if(is_uploaded_file($tmp_name)) { // open the file for a binary read $file = fopen($tmp_name,'rb'); // read the file content into a variable $data = fread($file,filesize($tmp_name)); // close the file fclose($file); // now we encode it and split it into acceptable length lines $data = chunk_split(base64_encode($data)); } // now we'll insert a boundary to indicate we're starting the attachment // we have to specify the content type, file name, and disposition as // an attachment, then add the file content. // NOTE: we don't set another boundary to indicate that the end of the // file has been reached here. we only want one boundary between each file // we'll add the final one after the loop finishes. $message .= "--{$mime_boundary}\n" . "Content-Type: {$type};\n" . " name=\"{$name}\"\n" . "Content-Disposition: attachment;\n" . " filename=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; } } $ok = @mail($to, $subject, $message , $headers); if ($ok) { if (($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg") && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); } } } else { } echo "<span class='red'>E-mail has been sent successfully from $mail_name to $to</span>"; } else{ echo "<span class='red'>Failed to send the E-mail from $from to $to</span>"; } } ?> 

p / s: Я использовал этот код. Надеюсь, его работа и поможет вам. Просто скопируйте и вставьте.make, чтобы ваше текстовое поле было таким же, как на этой странице. Работает для всех типов файлов. Для получения дополнительных вопросов просто напишите мне на шахе @ mc-oren.com.anyway, я также участвую в процессе обучения. =).