Jump to content

Adding Multiple Email Recipients in Joomla Mailto Component


basplund347

Recommended Posts

You'll have to forgive me because I am NOT a php expert by any means (most of it confuses me, lol). But, I'm trying to make 2 changes to Joomla's existing mailto component which allows you to email links to the site to others. 1) Right now it only allows you to enter 1 email recipient when you're sending them a link to your profile. I need the user to be able to enter multiple email addresses if they choose (typically separated by a comma/space, but that isn't working). 2) When it sends the email to the recipient, it includes a url link to that user's profile. But, I'd like it to send a small icon of their profile avatar in place of the blue url link. So, when the recipient opens the email, they see the text and a picture of the user. When they click the picture, it goes to that user's profile. 

 

Any immediate help is appreciated!!!

 

This is the current code of the basic mailto component (controller.php):

 

<?php
/**
 * @package Joomla.Site
 * @subpackage com_mailto
 * @copyright Copyright © 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */
 
defined('_JEXEC') or die;
 
/**
 * @package Joomla.Site
 * @subpackage com_mailto
 */
class MailtoController extends JControllerLegacy
{
/**
* Show the form so that the user can send the link to someone
*
* @access public
* @since 1.5
*/
function mailto()
{
$session = JFactory::getSession();
$session->set('com_mailto.formtime', time());
JRequest::setVar('view', 'mailto');
$this->display();
}
 
/**
* Send the message and display a notice
*
* @access public
* @since 1.5
*/
function send()
{
// Check for request forgeries
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
 
$app = JFactory::getApplication();
$session = JFactory::getSession();
$db = JFactory::getDbo();
 
$timeout = $session->get('com_mailto.formtime', 0);
if ($timeout == 0 || time() - $timeout < 20) {
JError::raiseNotice(500, JText:: _ ('COM_MAILTO_EMAIL_NOT_SENT'));
return $this->mailto();
}
 
$SiteName = $app->getCfg('sitename');
$MailFrom = $app->getCfg('mailfrom');
$FromName = $app->getCfg('fromname');
 
$link = MailtoHelper::validateHash(JRequest::getCMD('link', '', 'post'));
 
// Verify that this is a local link
if (!$link || !JURI::isInternal($link)) {
//Non-local url...
JError::raiseNotice(500, JText:: _ ('COM_MAILTO_EMAIL_NOT_SENT'));
return $this->mailto();
}
 
// An array of email headers we do not want to allow as input
$headers = array ( 'Content-Type:',
'MIME-Version:',
'Content-Transfer-Encoding:',
'bcc:',
'cc:');
 
// An array of the input fields to scan for injected headers
$fields = array(
'mailto',
'sender',
'from',
'subject',
);
 
/*
* Here is the meat and potatoes of the header injection test.  We
* iterate over the array of form input and check for header strings.
* If we find one, send an unauthorized header and die.
*/
foreach ($fields as $field)
{
foreach ($headers as $header)
{
if (strpos($_POST[$field], $header) !== false)
{
JError::raiseError(403, '');
}
}
}
 
/*
* Free up memory
*/
unset ($headers, $fields);
 
$email = JRequest::getString('mailto', '', 'post');
$sender = JRequest::getString('sender', '', 'post');
$from = JRequest::getString('from', '', 'post');
$subject_default = JText::sprintf('COM_MAILTO_SENT_BY', $sender);
$subject = JRequest::getString('subject', $subject_default, 'post');
 
// Check for a valid to address
$error = false;
if (! $email  || ! JMailHelper::isEmailAddress($email))
{
$error = JText::sprintf('COM_MAILTO_EMAIL_INVALID', $email);
JError::raiseWarning(0, $error);
}
 
// Check for a valid from address
if (! $from || ! JMailHelper::isEmailAddress($from))
{
$error = JText::sprintf('COM_MAILTO_EMAIL_INVALID', $from);
JError::raiseWarning(0, $error);
}
 
if ($error)
{
return $this->mailto();
}
 
// Build the message to send
$msg = JText :: _('COM_MAILTO_EMAIL_MSG');
$body = sprintf($msg, $SiteName, $sender, $from, $link);
 
// Clean the email data
$subject = JMailHelper::cleanSubject($subject);
$body = JMailHelper::cleanBody($body);
$sender = JMailHelper::cleanAddress($sender);
 
// Send the email
if (JFactory::getMailer()->sendMail($from, $sender, $email, $subject, $body) !== true)
{
JError::raiseNotice(500, JText:: _ ('COM_MAILTO_EMAIL_NOT_SENT'));
return $this->mailto();
}
 
JRequest::setVar('view', 'sent');
$this->display();
}
}
 
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.