oagacino Posted January 21, 2018 Share Posted January 21, 2018 Dear because when executing email2mysql.php file taken from URL http://w3schools.invisionzone.com/topic/41225-get-contents-from-e-mail-and-write-it-to-mysql-table appears Parse error: syntax error, unexpected 'stream' (T_STRING) in email2mysql.php on line 73 thank you very much for your help Link to comment Share on other sites More sharing options...
niche Posted January 21, 2018 Share Posted January 21, 2018 might as well post your code so we can see what's actually on line 73 Link to comment Share on other sites More sharing options...
oagacino Posted January 21, 2018 Author Share Posted January 21, 2018 ok email2mysql.php Link to comment Share on other sites More sharing options...
oagacino Posted January 21, 2018 Author Share Posted January 21, 2018 2 hours ago, niche said: might as well post your code so we can see what's actually on line 73 email2mysql.php Link to comment Share on other sites More sharing options...
niche Posted January 21, 2018 Share Posted January 21, 2018 pls post with the code tags <> Link to comment Share on other sites More sharing options...
oagacino Posted January 21, 2018 Author Share Posted January 21, 2018 3 minutes ago, niche said: pls post with the code tags <> <?php $now = time(); // current time $mailbox = '{your-mailserver-here/imap/novalidate-cert}INBOX'; // see http://www.php.net/manual/en/function.imap-open.php $mbox = imap_open($mailbox, 'email-address-here', 'password-here'); // log in to mail server if (!$mbox) echo ('Failed opening mailbox<br>' . print_r(imap_errors(), true)); // remove the print_r for production use else{ $box = imap_check($mbox); // get the inbox for ($imap_idx = 1; $imap_idx <= $box->Nmsgs; $imap_idx++) // loop through the messages { $headers = imap_headerinfo($mbox, $imap_idx); // http://www.php.net/manual/en/function.imap-headerinfo.php $raw_headers = imap_fetchheader($mbox, $imap_idx); // http://www.php.net/manual/en/function.imap-fetchheader.php $selected_headers = ''; $text_part = ''; $html_part = ''; $original_message = imap_body($mbox, $imap_idx); // save the copy of the entire thing, attachments and all // build selected headers string for ($ii = 0; $ii < count($headers->from); $ii++) $selected_headers .= 'From: ' . $headers->from[$ii]->mailbox . '@' . $headers->from[$ii]->host . "\n"; for ($ii = 0; $ii < count($headers->to); $ii++) $selected_headers .= 'To: ' . $headers->to[$ii]->mailbox . '@' . $headers->to[$ii]->host . "\n"; for ($ii = 0; $ii < count($headers->cc); $ii++) $selected_headers .= 'Cc: ' . $headers->cc[$ii]->mailbox . '@' . $headers->cc[$ii]->host . "\n"; for ($ii = 0; $ii < count($headers->bcc); $ii++) $selected_headers .= 'Bcc: ' . $headers->bcc[$ii]->mailbox . '@' . $headers->bcc[$ii]->host . "\n"; if (!empty($headers->date)) $selected_headers .= 'Date: ' . $headers->date . "\n"; if (!empty($headers->subject)) $selected_headers .= 'Subject: ' . $headers->subject . "\n"; // see below; getMsg uses global variables getMsg($mbox, $imap_idx); $text_part = $plainmsg; // text portion of the email $html_part = $htmlmsg; // html portion of the email // check for text portion first $msg_text = trim(strip_tags($plainmsg, '<a>')); if ($msg_text == '') { // text portion is empty, check html portion $msg_text = trim($htmlmsg); if ($msg_text == '') { // no text or html portion auto-detected, check manually $msg_text = imap_body($mbox, $imap_idx); // get the entire raw message // check for quoted-printable encoding with possible boundary markers and headers at the top $chunks = explode("\n", trim($msg_text)); if (count($chunks) > 1) // if there are multiple lines { $quoted_printable = false; if (strpos($chunks[0], '--') === 0) // if the first line is a boundary marker (starts with '--') { array_shift($chunks); // remove the first line if (strpos($chunks[count($chunks) - 1], '--') === 0) // check the last line { array_pop($chunks); // remove that too } } if (strpos(strtolower($chunks[0]), 'content-type') === 0) array_shift($chunks); // remove the first line if it's a content-type header if (strpos(strtolower($chunks[0]), 'content-transfer-encoding') === 0) { if (strpos(strtolower($chunks[0]), 'quoted-printable')) $quoted_printable = true; // this email was sent using quoted-printable encoding array_shift($chunks); // remove the content-transfer-encoding header } $msg_text = implode("\n", $chunks); // put the remaining lines back together if ($quoted_printable) $msg_text = quoted_printable_decode($msg_text); $msg_text = utf8_decode($msg_text); } } } $from = trim($headers->from[0]->mailbox . '@' . $headers->from[0]->host); $msgId = isset($headers->message_id) ? trim($headers->message_id) : ''; $time = strtotime($headers->date); if ($time == 0) $time = $now; /****************************************************** At this point: $headers: the object returned from imap_headerinfo $selected_headers: text of some headers to display to a user checking mail (subject, from, etc) $text_part: the text portion, if found $html_part: the html portion, if found $msg_text: either the text part, html part, or manually-decoded part (this is the variable to use as email body) $original_message: the entire unprocessed email body, includingall parts and any attachments $from: From address $msgId: message ID from the headers $time: email delivery time, as a Unix timestamp $attachments: array of attachments (see below) ******************************************************/ // process attachments foreach ($attachments as $filename => $data) { // e.g. file_put_contents('attachments/' . $filename, $data); } // flag the email for deletion imap_delete($mbox, $imap_idx); } // delete emails and close the mailbox imap_expunge($mbox); imap_close($mbox);}function getMsg($mbox,$mid) { // input $mbox = IMAP stream, $mid = message id // output all the following: global $htmlmsg,$plainmsg,$charset,$attachments; // the message may in $htmlmsg, $plainmsg, or both $htmlmsg = $plainmsg = $charset = ''; $attachments = array(); // HEADER $h = imap_header($mbox,$mid); // add code here to get date, from, to, cc, subject... // BODY $s = imap_fetchstructure($mbox,$mid); if (empty($s->parts)) // not multipart getMsgPart($mbox,$mid,$s,0); // no part-number, so pass 0 else { // multipart: iterate through each part foreach ($s->parts as $partno0=>$p) getMsgPart($mbox,$mid,$p,$partno0+1); }}function getMsgPart($mbox,$mid,$p,$partno) { // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart global $htmlmsg,$plainmsg,$charset,$attachments; // DECODE DATA $data = ($partno)? imap_fetchbody($mbox,$mid,$partno): // multipart imap_body($mbox,$mid); // not multipart // Any part may be encoded, even plain text messages, so check everything. if ($p->encoding==4) $data = quoted_printable_decode($data); elseif ($p->encoding==3) $data = base64_decode($data); // no need to decode 7-bit, 8-bit, or binary // PARAMETERS // get all parameters, like charset, filenames of attachments, etc. $params = array(); if ($p->ifparameters) foreach ($p->parameters as $x) $params[ strtolower( $x->attribute ) ] = $x->value; if ($p->ifdparameters) foreach ($p->dparameters as $x) $params[ strtolower( $x->attribute ) ] = $x->value; // ATTACHMENT // Any part with a filename is an attachment, // so an attached text file (type 0) is not mistaken as the message. if (!empty($params['filename']) || !empty($params['name'])) { // filename may be given as 'Filename' or 'Name' or both $filename = (!empty($params['filename']))? $params['filename'] : $params['name']; // filename may be encoded, so see imap_mime_header_decode() $attachments[$filename] = $data; // this is a problem if two files have same name } // TEXT elseif ($p->type==0 && $data) { // Messages may be split in different parts because of inline attachments, // so append parts together with blank row. if ($p->ifsubtype && strtolower($p->subtype)=='plain') $plainmsg .= trim($data) ."\n\n"; else $htmlmsg .= $data ."<br><br>"; $charset = $params['charset']; // assume all parts are same charset } // EMBEDDED MESSAGE // Many bounce notifications embed the original message as type 2, // but AOL uses type 1 (multipart), which is not handled here. // There are no PHP functions to parse embedded messages, // so this just appends the raw source to the main message. elseif ($p->type==2 && $data) { $plainmsg .= trim($data) ."\n\n"; } // SUBPART RECURSION if (!empty($p->parts)) { foreach ($p->parts as $partno0=>$p2) getMsgPart($mbox,$mid,$p2,$partno.'.'.($partno0+1)); // 1.2, 1.2.1, etc. }} ?> Link to comment Share on other sites More sharing options...
oagacino Posted January 21, 2018 Author Share Posted January 21, 2018 (edited) 5 minutes ago, oagacino said: 280/5000 I do not know why the execution of email2mysql.phptaken exactly fromURL http://w3schools.invisionzone.com/topic/41225-get-contents-from-e-mail-and-write-it-to-mysql-tablethrows the errorParse error: syntax error, unexpected 'stream' (T_STRING) in email2mysql.php on line 73 Sugerir un cambio Edited January 21, 2018 by oagacino Link to comment Share on other sites More sharing options...
niche Posted January 21, 2018 Share Posted January 21, 2018 looks like you need a ; at the end of this line: $mbox = IMAP stream, $mid = message id Link to comment Share on other sites More sharing options...
dsonesuk Posted January 21, 2018 Share Posted January 21, 2018 its a comment should have // at beginning; This // assume all parts are same charset } // EMBEDDED MESSAGE the curly bracket at end is part of elseif condition should be // assume all parts are same charset } // EMBEDDED MESSAGE 1 Link to comment Share on other sites More sharing options...
niche Posted January 21, 2018 Share Posted January 21, 2018 (edited) wouldn't have got that. thx dsonesuk EDIT Does your text editor have a function to test for an open curly bracket? Edited January 21, 2018 by niche Link to comment Share on other sites More sharing options...
dsonesuk Posted January 21, 2018 Share Posted January 21, 2018 No! it highlights error caused by missing '{' saying unexpected elseif, and suggest possible syntax error with preceding error '{'. which turns out to be correct, so working way down I found '}' embedded in comment. 1 Link to comment Share on other sites More sharing options...
oagacino Posted January 21, 2018 Author Share Posted January 21, 2018 3 minutes ago, niche said: 163/5000 he ; just like // they do not solve anythingbecause you better not send me please the original PHPor another version that transfers an Email to a mysq table!thank you very much Link to comment Share on other sites More sharing options...
dsonesuk Posted January 21, 2018 Share Posted January 21, 2018 <?php $now = time(); // current time $mailbox = '{your-mailserver-here/imap/novalidate-cert}INBOX'; // see http://www.php.net/manual/en/function.imap-open.php $mbox = imap_open($mailbox, 'email-address-here', 'password-here'); // log in to mail server if (!$mbox) echo ('Failed opening mailbox<br>' . print_r(imap_errors(), true)); // remove the print_r for production use else { $box = imap_check($mbox); // get the inbox for ($imap_idx = 1; $imap_idx <= $box->Nmsgs; $imap_idx++) { // loop through the messages $headers = imap_headerinfo($mbox, $imap_idx); // http://www.php.net/manual/en/function.imap-headerinfo.php $raw_headers = imap_fetchheader($mbox, $imap_idx); // http://www.php.net/manual/en/function.imap-fetchheader.php $selected_headers = ''; $text_part = ''; $html_part = ''; $original_message = imap_body($mbox, $imap_idx); // save the copy of the entire thing, attachments and all // build selected headers string for ($ii = 0; $ii < count($headers->from); $ii++) $selected_headers .= 'From: ' . $headers->from[$ii]->mailbox . '@' . $headers->from[$ii]->host . "\n"; for ($ii = 0; $ii < count($headers->to); $ii++) $selected_headers .= 'To: ' . $headers->to[$ii]->mailbox . '@' . $headers->to[$ii]->host . "\n"; for ($ii = 0; $ii < count($headers->cc); $ii++) $selected_headers .= 'Cc: ' . $headers->cc[$ii]->mailbox . '@' . $headers->cc[$ii]->host . "\n"; for ($ii = 0; $ii < count($headers->bcc); $ii++) $selected_headers .= 'Bcc: ' . $headers->bcc[$ii]->mailbox . '@' . $headers->bcc[$ii]->host . "\n"; if (!empty($headers->date)) $selected_headers .= 'Date: ' . $headers->date . "\n"; if (!empty($headers->subject)) $selected_headers .= 'Subject: ' . $headers->subject . "\n"; // see below; getMsg uses global variables getMsg($mbox, $imap_idx); $text_part = $plainmsg; // text portion of the email $html_part = $htmlmsg; // html portion of the email // check for text portion first $msg_text = trim(strip_tags($plainmsg, '<a>')); if ($msg_text == '') { // text portion is empty, check html portion $msg_text = trim($htmlmsg); if ($msg_text == '') { // no text or html portion auto-detected, check manually $msg_text = imap_body($mbox, $imap_idx); // get the entire raw message // check for quoted-printable encoding with possible boundary markers and headers at the top $chunks = explode("\n", trim($msg_text)); if (count($chunks) > 1) { // if there are multiple lines $quoted_printable = false; if (strpos($chunks[0], '--') === 0) { // if the first line is a boundary marker (starts with '--') array_shift($chunks); // remove the first line if (strpos($chunks[count($chunks) - 1], '--') === 0) { // check the last line array_pop($chunks); // remove that too } } if (strpos(strtolower($chunks[0]), 'content-type') === 0) array_shift($chunks); // remove the first line if it's a content-type header if (strpos(strtolower($chunks[0]), 'content-transfer-encoding') === 0) { if (strpos(strtolower($chunks[0]), 'quoted-printable')) $quoted_printable = true; // this email was sent using quoted-printable encoding array_shift($chunks); // remove the content-transfer-encoding header } $msg_text = implode("\n", $chunks); // put the remaining lines back together if ($quoted_printable) $msg_text = quoted_printable_decode($msg_text); $msg_text = utf8_decode($msg_text); } } } $from = trim($headers->from[0]->mailbox . '@' . $headers->from[0]->host); $msgId = isset($headers->message_id) ? trim($headers->message_id) : ''; $time = strtotime($headers->date); if ($time == 0) $time = $now; /* * **************************************************** At this point: $headers: the object returned from imap_headerinfo $selected_headers: text of some headers to display to a user checking mail (subject, from, etc) $text_part: the text portion, if found $html_part: the html portion, if found $msg_text: either the text part, html part, or manually-decoded part (this is the variable to use as email body) $original_message: the entire unprocessed email body, includingall parts and any attachments $from: From address $msgId: message ID from the headers $time: email delivery time, as a Unix timestamp $attachments: array of attachments (see below) ***************************************************** */ // process attachments foreach ($attachments as $filename => $data) { // e.g. file_put_contents('attachments/' . $filename, $data); } // flag the email for deletion imap_delete($mbox, $imap_idx); } // delete emails and close the mailbox imap_expunge($mbox); imap_close($mbox); } function getMsg($mbox, $mid) { // input $mbox = IMAP stream, $mid = message id // output all the following: global $htmlmsg, $plainmsg, $charset, $attachments; // the message may in $htmlmsg, $plainmsg, or both $htmlmsg = $plainmsg = $charset = ''; $attachments = array(); // HEADER $h = imap_header($mbox, $mid); // add code here to get date, from, to, cc, subject... // BODY $s = imap_fetchstructure($mbox, $mid); if (empty($s->parts)) // not multipart getMsgPart($mbox, $mid, $s, 0); // no part-number, so pass 0 else { // multipart: iterate through each part foreach ($s->parts as $partno0 => $p) getMsgPart($mbox, $mid, $p, $partno0 + 1); } } function getMsgPart($mbox, $mid, $p, $partno) { // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart global $htmlmsg, $plainmsg, $charset, $attachments; // DECODE DATA $data = ($partno) ? imap_fetchbody($mbox, $mid, $partno) : // multipart imap_body($mbox, $mid); // not multipart // Any part may be encoded, even plain text messages, so check everything. if ($p->encoding == 4) $data = quoted_printable_decode($data); elseif ($p->encoding == 3) $data = base64_decode($data); // no need to decode 7-bit, 8-bit, or binary // PARAMETERS // get all parameters, like charset, filenames of attachments, etc. $params = array(); if ($p->ifparameters) foreach ($p->parameters as $x) $params[strtolower($x->attribute)] = $x->value; if ($p->ifdparameters) foreach ($p->dparameters as $x) $params[strtolower($x->attribute)] = $x->value; // ATTACHMENT // Any part with a filename is an attachment, // so an attached text file (type 0) is not mistaken as the message. if (!empty($params['filename']) || !empty($params['name'])) { // filename may be given as 'Filename' or 'Name' or both $filename = (!empty($params['filename'])) ? $params['filename'] : $params['name']; // filename may be encoded, so see imap_mime_header_decode() $attachments[$filename] = $data; // this is a problem if two files have same name } // TEXT elseif ($p->type == 0 && $data) { // Messages may be split in different parts because of inline attachments, // so append parts together with blank row. if ($p->ifsubtype && strtolower($p->subtype) == 'plain') $plainmsg .= trim($data) . "\n\n"; else $htmlmsg .= $data . "<br><br>"; $charset = $params['charset']; // assume all parts are same charset } // EMBEDDED MESSAGE // Many bounce notifications embed the original message as type 2, // but AOL uses type 1 (multipart), which is not handled here. // There are no PHP functions to parse embedded messages, // so this just appends the raw source to the main message. elseif ($p->type == 2 && $data) { $plainmsg .= trim($data) . "\n\n"; } // SUBPART RECURSION if (!empty($p->parts)) { foreach ($p->parts as $partno0 => $p2) getMsgPart($mbox, $mid, $p2, $partno . '.' . ($partno0 + 1)); // 1.2, 1.2.1, etc. } } ?> Link to comment Share on other sites More sharing options...
niche Posted January 21, 2018 Share Posted January 21, 2018 (edited) Gotcha on that open { BTW, I've seen editors that have a hot key that auto formats pasted code. is that what you used? if so, which editor do you use? if not, returning manually formatted code is above and beyond. either way, great work. let me know about your editor. thx again dsonesuk Edited January 21, 2018 by niche Link to comment Share on other sites More sharing options...
oagacino Posted January 22, 2018 Author Share Posted January 22, 2018 Dear my editor used is vi de linux Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now