diff -rNu mantis.orig/README.bug_report_mail mantis/README.bug_report_mail
--- mantis.orig/README.bug_report_mail Thu Jan 1 01:00:00 1970
+++ mantis/README.bug_report_mail Mon Aug 9 23:26:21 2004
@@ -0,0 +1,54 @@
+The current version of bug_report_mail only support plain text e-mails
+and POP3 Mailaccounts with PEAR's Net_POP3 packge.
+
+bug_report_mail is able to recognize if mail is a reply to an already opened
+bug and adds the content as a bugnote.
+
+If you are alway running Mantis you have to alter you projects table
+with the sql/bug_report_mail.sql script.
+If not, you can create the database tables in the way described in
+the doc/INSTALL file.
+
+This patch changes the following files:
+ core/user_api.php
+ manage_proj_edit_page.php
+ config_inc.php.sample
+These files are new:
+ core/mail_api.php
+ sql/bug_report_mail.php
+ bug_report_mail.php
+ manage_proj_mail_delete.php
+ manage_proj_mail_update.php
+
+After installing this patch, you can add a POP3 server's hostname
+and authentication data for each of your projects with the
+project edit form.
+
+There are two ways to receive mail with bug_report_mail:
+The secure way is to use a standard reporting user:
+You have to create a reporter account, for example 'Mail'.
+The name for this reporter account you have to write in your config_inc.php file:
+ $g_mail_reporter = "Mail";
+and then, bug_report_mail must be informed to behave like this:
+ $g_mail_use_reporter = ON;
+
+The other way is to signup new user accounts automatically.
+For using this, you have to change this
+ $g_mail_auto_signup = OFF;
+from OFF to ON.
+Now, bug_report_mail will look for an user named like the mail's sender
+or an user which mail adress is identical.
+If no user is found, then a new account will be created.
+The new user's name will be the mail address.
+
+This could be used for attacks, but there is no other way in the moment.
+
+After this, bug_report_mail can be used via cron like this:
+
+*/5 * * * * lynx --dump http://mantis.homepage.com/bug_report_mail.php
+
+This line uses lynx to fetch bug reports from via POP3 every 5 minutes.
+
+This addon is distributed under the same condition as Mantis itself.
+
+Gerrit Beine, August 2004
diff -rNu mantis.orig/bug_report_mail.php mantis/bug_report_mail.php
--- mantis.orig/bug_report_mail.php Thu Jan 1 01:00:00 1970
+++ mantis/bug_report_mail.php Mon Aug 9 23:24:27 2004
@@ -0,0 +1,37 @@
+
+
+
+
+
diff -rNu mantis.orig/config_inc.php mantis/config_inc.php
--- mantis.orig/config_inc.php Thu Jan 1 01:00:00 1970
+++ mantis/config_inc.php Mon Aug 9 22:27:31 2004
@@ -0,0 +1,78 @@
+
diff -rNu mantis.orig/config_inc.php.sample mantis/config_inc.php.sample
--- mantis.orig/config_inc.php.sample Sun Feb 8 14:16:56 2004
+++ mantis/config_inc.php.sample Mon Aug 9 18:32:00 2004
@@ -64,4 +64,15 @@
# The default value is ON but you must make sure file uploading is enabled
# in PHP as well. You may need to add "file_uploads = TRUE" to your php.ini.
$g_allow_file_upload = ON;
+
+ # --- mail reporting settings -----
+ # This tells Mantis to report all the Mail with only one account
+ $g_mail_use_reporter = ON;
+
+ # The account's name for mail reporting
+ $g_mail_reporter = 'Mail';
+
+ # Signup new users automatically (possible security risk!)
+ # Default is OFF, only works if mail_use_reporter is OFF
+ $g_mail_auto_signup = OFF;
?>
diff -rNu mantis.orig/core/mail_api.php mantis/core/mail_api.php
--- mantis.orig/core/mail_api.php Thu Jan 1 01:00:00 1970
+++ mantis/core/mail_api.php Mon Aug 9 23:22:29 2004
@@ -0,0 +1,212 @@
+
+
+connect($t_pop3_host, 110);
+ $pop3->login($t_pop3_user, $t_pop3_password);
+ for ($i = 1; $i <= $pop3->numMsg(); $i++) {
+ $mail = $pop3->getParsedHeaders($i);
+ $mail['X-Mantis-Body'] = $pop3->getBody($i);
+ $mail['X-Mantis-Complete'] = $pop3->getMsg($i);
+ array_push($t_mails, $mail);
+ $pop3->deleteMsg($i);
+ }
+ $pop3->disconnect();
+ return $t_mails;
+ }
+
+ # --------------------
+ # return the a valid username from an email address
+ function mail_user_name_from_address ($p_mailaddress) {
+ $t_mailaddress = $p_mailaddress;
+ if (preg_match("/<(.*?)>/", $p_mailaddress, $matches)) {
+ $t_mailaddress = $matches[1];
+ }
+ return preg_replace("/[@\.-]/",'_',$t_mailaddress);
+ }
+
+ # --------------------
+ # return true if there is a valid mantis bug referernce in subject
+ function mail_is_a_bugnote ($p_subject) {
+ return preg_match("/\[([A-Za-z0-9-_\.]*\s[0-9]{7})\]/", $p_subject);
+ }
+
+ # --------------------
+ # return the bug's id from the subject
+ function mail_get_bug_id_from_subject ($p_subject) {
+ preg_match("/\[([A-Za-z0-9-_\.]*\s([0-9]{7}?))\]/", $p_subject, $matches);
+ return $matches[2];
+ }
+ # --------------------
+ # return the user id for the mail reporting user
+ # return false if no username can be found
+ function mail_get_user ($p_mail) {
+ $t_mail_use_reporter = config_get( 'mail_use_reporter' );
+ $t_mail_auto_signup = config_get( 'mail_auto_signup' );
+ if ($t_mail_use_reporter) {
+ $t_mail_reporter = config_get( 'mail_reporter' );
+ $t_reporter_id = user_get_id_by_name($t_mail_reporter);
+ }
+ else {
+ $t_user_name = mail_user_name_from_address($p_mail['From']);
+ $t_reporter_id = user_get_id_by_name($t_user_name);
+ if (!$t_reporter_id) { // try to get the user's id searching for mail address
+ $t_reporter_id = user_get_id_by_mail($p_mail['From']);
+ }
+ if (!$t_reporter_id && $t_mail_auto_signup) { // try to signup the user
+ user_signup($t_user_name, $p_mail['From']);
+ $t_reporter_id = user_get_id_by_name($t_user_name);
+ }
+ }
+ return $t_reporter_id;
+ }
+
+ # --------------------
+ # Adds a bug reported via email
+ # Todo: If there is already a bug, add it as a bug note
+ function mail_add_bug($p_mail, $p_project) {
+ $f_build = gpc_get_string( 'build', '' );
+ $f_platform = gpc_get_string( 'platform', '' );
+ $f_os = gpc_get_string( 'os', '' );
+ $f_os_build = gpc_get_string( 'os_build', '' );
+ $f_product_version = gpc_get_string( 'product_version', '' );
+ $f_profile_id = gpc_get_int( 'profile_id', 0 );
+ $f_handler_id = gpc_get_int( 'handler_id', 0 );
+ $f_view_state = gpc_get_int( 'view_state', 0 );
+
+ $f_category = gpc_get_string( 'category', '' );
+ $f_priority = gpc_get_int( 'priority', NORMAL );
+ $f_steps_to_reproduce = gpc_get_string( 'steps_to_reproduce', '' );
+
+ $f_reproducibility = 10;
+ $f_severity = 50;
+ $f_summary = $p_mail['Subject'];
+ $f_description = $p_mail['X-Mantis-Body'];
+ $f_additional_info = $p_mail['X-Mantis-Complete'];
+ $f_project_id = $p_project['id'];
+ $t_reporter_id = mail_get_user($p_mail);
+
+ if (mail_is_a_bugnote($p_mail['Subject']))
+ {
+ # Add a bug note
+ $t_bug_id = mail_get_bug_id_from_subject($p_mail['Subject']);
+ bugnote_add ( $t_bug_id, $p_mail['X-Mantis-Body'] );
+ email_bugnote_add ( $t_bug_id );
+ }
+ else
+ {
+ # Create the bug
+ $t_bug_id = bug_create( $f_project_id,
+ $t_reporter_id, $f_handler_id,
+ $f_priority,
+ $f_severity, $f_reproducibility,
+ $f_category,
+ $f_os, $f_os_build,
+ $f_platform, $f_product_version,
+ $f_build,
+ $f_profile_id, $f_summary, $f_view_state,
+ $f_description, $f_steps_to_reproduce, $f_additional_info );
+ email_new_bug( $t_bug_id );
+ }
+
+ }
+
+?>
diff -rNu mantis.orig/core/user_api.php mantis/core/user_api.php
--- mantis.orig/core/user_api.php Sun Jan 11 08:16:10 2004
+++ mantis/core/user_api.php Sun Aug 8 20:08:38 2004
@@ -413,6 +413,26 @@
}
# --------------------
+ # get a user id from an mail address
+ # return false if the mail address does not exist
+ function user_get_id_by_mail( $p_mailadress ) {
+ $c_mailadress = db_prepare_string( $p_mailadress );
+
+ $t_user_table = config_get( 'mantis_user_table' );
+
+ $query = "SELECT id
+ FROM $t_user_table
+ WHERE email='$c_mailadress'";
+ $result = db_query( $query );
+
+ if ( 0 == db_num_rows( $result ) ) {
+ return false;
+ } else {
+ return db_result( $result );
+ }
+ }
+
+ # --------------------
# return all data associated with a particular user name
# return false if the username does not exist
function user_get_row_by_name( $p_username ) {
diff -rNu mantis.orig/manage_proj_edit_page.php mantis/manage_proj_edit_page.php
--- mantis.orig/manage_proj_edit_page.php Sun Jan 11 08:16:06 2004
+++ mantis/manage_proj_edit_page.php Mon Aug 9 21:37:44 2004
@@ -18,6 +18,7 @@
require_once( $t_core_path . 'version_api.php' );
require_once( $t_core_path . 'custom_field_api.php' );
require_once( $t_core_path . 'icon_api.php' );
+ require_once( $t_core_path . 'mail_api.php' );
?>
@@ -524,6 +526,57 @@
} # end for
?>
+
+
+
+
+