PHP Email Forwarder

An Automatic IMAP/POP3 Email Forwarder

About this project

PHP Email Forwarder automatically gets all unread message from a specified IMAP/POP3 email account. Then forwards using PHP Mail() it to another email address or list of email addresses. You may use this for your company email, in which, messages received can be forwarded to multiple employees.

Setting up

  • Copy the files to a specific directory.
  • Create a copy of settings.sample.php and rename it as settings.php.
  • Fill in the fields required in the file.
  • An instance of the settings will look like this:
// ... (removed code)
 'in' => [
     'host' => '',
     'port' => 995,
     'type' => 'imap', // can be: pop3 or imap, note: seen/unseen does not work on pop3
     'security' => 'ssl' // can be: ssl, tls, notls

 // username and password for incoming mail box
 'user' => '',
 'password' => 'password',

 // where to send
 'to' => ['new_user@example', ''],

 'delete_copy' => false // when set to true message will be delete after forwarded
  • You can create more instances to watch another email.
  • Create a cron task to run /usr/bin/php task.php every 5 minutes or so.

Image Taken at Suzhou, Jiangsu, China, edited with Adobe Photoshop CC 2017.

PHP Combine Path

PHP Combine Path is a simple function I created that is roughly equivalent to Microsoft .NET’s Path.Combine method. This function combines two strings into a path. However, this only handles when to place path separators in between the two strings given, whether given string is a valid path or not.

It works by trimming off separator characters on the left side of $path1 and the right side of $path2, which is then concatenated as $path1, the directory separator character, and $path2. The function also works with URLs.

if (!function_exists('str_combinepath')){
 * Combines two strings into a path.
 * @param string $path1 : The first path to combine.
 * @param string $path2 : The second path to combine.
 * @param string $separator : (Optional) The directory separator. Default: OS specified.
function str_combinepath($path1, $path2, $separator = DIRECTORY_SEPARATOR){
	$path1 = rtrim($path1, $separator);
	$path2 = ltrim($path2, $separator);
	return $path1 . $separator . $path2;


str_combinepath ('/home', 'usr/');
// Result: '/home/usr/'

str_combinepath ('/home/', 'usr/');
// Result: '/home/usr/'

str_combinepath ('c:\temp', 'subdir\file.txt', '\\');
// Result: 'C:\temp\subdir\file.txt'

// Also works for URL's
str_combinepath ('', 'wp-admin', '/');
// Result:

You can see more of my PHP gists here.

Image Taken at Suzhou, Jiangsu, China, edited with Prisma AI.