View Full Version : Email to post
tomshawk
04-24-2015, 03:18 AM
Hello,
I would love to have someone be able to send an email to an address that I assign.
When the email is received, a post is created in a thread I designate.
Is that possible?
Yes it is.
PHP with pop3/imap client for the e-mail account + vB cron job + datamanager.
--------------- Added 1431204794 at 1431204794 ---------------
Setup email account.
Set user/forum/thread ids.
Later put the code into some file - lets call it 'email2post.php', upload to the main vB directory.
When all will be done, send a test email to your mailbox and run the script from a browser.
I tested it under vB 4.2.2.
Treat this script as example, fix it as you need. Do not use it in public,
<?php
// simple email2post
// fix it as you need
// QSTR - 09.05.2015r1
// https://vborg.vbsupport.ru/showthread.php?t=318396
// GPL - http://www.gnu.org/copyleft/gpl.html
require_once('./global.php');
require_once(DIR . '/includes/functions_databuild.php');
// configure as you need
// http://php.net/manual/en/function.imap-open.php
$imap = imap_open("{localhost:995/pop3/ssl/novalidate-cert}INBOX", "mailUser", "mailPass");
// user id used for posting
$post_user_id = 1234;
// forum id
$post_forum_id = 1;
// thread id
$post_thread_id = 5678;
################################################## ################################################## ###################
// add post, simple
function add_post($userid, $post, $forumid, $threadid, $timestamp)
{
global $vbulletin;
// setup datamanager
$tdm =& datamanager_init('Post', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$tdm->set('userid', $userid);
$tdm->set('pagetext', $post);
$tdm->set('allowsmilie', 1);
$tdm->set('visible', 1);
$tdm->set('threadid', $threadid);
$tdm->set('dateline', $timestamp);
// try to save the post
$tdm->pre_save();
// check for errors
if (empty($tdm->errors))
{
$post_id = $tdm->save();
// rebuild counters
build_thread_counters($threadid);
build_forum_counters($forumid);
return $post_id;
} else {
return false;
}
}
// connection ok?
if ($imap)
{
// count the messages in the mailbox
$mails_count = imap_num_msg($imap);
// if we got some
if($mails_count > 0)
{
// each mail
for ($mail_id = 1; $mail_id <= $mails_count; $mail_id++)
{
// mail body
$mail_body = imap_qprint(imap_body($imap, $mail_id));
// some info
echo $mail_id . ". <pre>" . $mail_body . "</pre><br><b>post id: ";
echo add_post($post_user_id, $mail_body, $post_forum_id, $post_thread_id, time());
echo "</b><br><hr><br>";
// mark for deletion
imap_delete($imap, $mail_id);
}
} else {
echo "empty mailbox";
}
// delete marked messages, close imap
imap_expunge($imap);
imap_close($imap);
}
?>
tomshawk
05-12-2015, 03:40 PM
Awesome, sorry I'm so late on this but Thank you very much.
I will try this as soon as I can
tomshawk
05-17-2015, 12:59 PM
Sorry to bother you but.
I finally had a chance to test this.
When I run the file manually the data shows up in the web browser and the email deletes from the server as expected but the data does not get posted to the forum/thread as hoped.
I put in the userid, the threadid and the forumid it just does not post.
No errors BTW
Any ideas?
Hey,
No problem.
Did you get any post ID?
152496
tomshawk
05-17-2015, 04:54 PM
Yes, I got a post ID
This is the output when running the php file
1.
Test1
Test2
Test3
post id: 3420
But it is not appearing in the forum
--------------- Added 1431888963 at 1431888963 ---------------
Interestingly I thought it would show the subject title as well as Body but I can work with this.
Thank you very much
Hmm.
Weird. You got post ID so... whole vB mechanism is working.
I did couple tests on vB 4.2.2 and it worked like a charm.
Please check your IDs twice.
I will think about it.
tomshawk
05-17-2015, 05:27 PM
Hmm.
Weird. You got post ID so... whole vB mechanism is working.
I did couple tests on vB 4.2.2 and it worked like a charm.
Please check your IDs twice.
I will think about it.
Ugh, You were right, I typed to fast and goofed on the ThreadID
It's working perfectly
You rock
thank you very much
Hehe. Enjoy!
Here is the version with mail subject to post title.
No subject, no title.
Should work for iso-8859-1 etc.
For UTF-8 you will have to make some tweaks.
<?php
// simple email2post
// fix it as you need
// QSTR - 17.05.2015r1
// https://vborg.vbsupport.ru/showthread.php?t=318396
// GPL - http://www.gnu.org/copyleft/gpl.html
require_once('./global.php');
require_once(DIR . '/includes/functions_databuild.php');
// configure as you need
// http://php.net/manual/en/function.imap-open.php
$imap = imap_open("{localhost:995/pop3/ssl/novalidate-cert}INBOX", "user", "pass");
// user id used for posting
$post_user_id = 1234;
// forum id
$post_forum_id = 1;
// thread id
$post_thread_id = 1;
################################################## ################################################## ###################
// add post, simple
function add_post($userid, $post, $post_title, $forumid, $threadid, $timestamp)
{
global $vbulletin;
// setup datamanager
$tdm =& datamanager_init('Post', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$tdm->set('userid', $userid);
$tdm->set('pagetext', $post);
$tdm->set('allowsmilie', 1);
$tdm->set('visible', 1);
$tdm->set('threadid', $threadid);
$tdm->set('dateline', $timestamp);
// if set
if ($post_title && trim($post_title) != "")
{
$tdm->set('title', $post_title);
}
// try to save the post
$tdm->pre_save();
// check for errors
if (empty($tdm->errors))
{
$post_id = $tdm->save();
// rebuild counters
build_thread_counters($threadid);
build_forum_counters($forumid);
return $post_id;
} else {
return false;
}
}
// connection ok?
if ($imap)
{
// count the messages in the mailbox
$mails_count = imap_num_msg($imap);
// if we got some
if($mails_count > 0)
{
// each mail
for ($mail_id = 1; $mail_id <= $mails_count; $mail_id++)
{
// mail header
$mail_header = imap_headerinfo($imap, $mail_id);
// mail body
$mail_body = imap_qprint(imap_body($imap, $mail_id));
// mail subject
$mail_subject = $mail_header->subject;
// some info
echo $mail_id . ".<br>";
echo "subject: " . $mail_subject . "<br>";
echo "mail body: " . "<br><pre>" . $mail_body . "</pre><br><b>post id: ";
echo add_post($post_user_id, $mail_body, $mail_subject, $post_forum_id, $post_thread_id, time());
echo "</b><br><hr><br>";
// mark for deletion
imap_delete($imap, $mail_id);
}
} else {
echo "empty mailbox";
}
// delete marked messages, close imap
imap_expunge($imap);
imap_close($imap);
}
?>
tomshawk
05-18-2015, 04:14 AM
Sweet, thanks again and thanks for the updated code. Awesome!
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.