Jump to content
lukasz_biovico

znaki "[ nadawca ]" w temacie maila

Recommended Posts

Witam

 

Sprawa polega na tym że chciałbym wyeliminować z tytułów maili symbole " [ nadawca ] ".

 

A dokładniej:

Gdy klient otrzymuje maila powiedzmy z potwierdzeniem płatności bądź wykonania zakupu w temacie maila mam coś takiego:

 

[nazwa_sklepu] Potwierdzenie zamówienia

 

a chciałbym aby w temacie pojawiało się tylko

 

Potwierdzenie zamówienia

 

 

Sprawdzając tematy szablonów email znajduje się w nich normalny tytuł bez znaków "[ " i nazwy sklepu.

Sprawdzając pliki w folderze /mails także nie ma tej części wiadomości.

 

Próbowaliście kiedyś usunąć nazwę sklepu z tytułów maili?

Share this post


Link to post
Share on other sites

Cześć

Aby usunąć z tytułów wiadomości e mail, nazwę sklepu w nawiasach kwadratowych (Prestashop 1.5.4.1) trzeba napisać override pliku /classes/Mail.php

 

Interesuje nas fragment kodu około linii 231

/* Create mail and attach differents parts */
  $message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] '.$subject);

Po zmianie go na:

/* Create mail and attach differents parts */
$message = new Swift_Message($subject);

Tematy wiadomości nie zawierają już nazwy sklepu ani nawiasów kwadratowych.

 

Czyli trzeba:

  1. stworzyć plik /override/classes/Mail.php
  2. umieścić w nim kod:
    	<?php
    class Mail extends MailCore
    	{
    
    	public static function Send($id_lang, $template, $subject, $template_vars, $to,
    	  $to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null, $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null)
    	{
    	  $configuration = Configuration::getMultiple(array(
    	   'PS_SHOP_EMAIL',
    	   'PS_MAIL_METHOD',
    	   'PS_MAIL_SERVER',
    	   'PS_MAIL_USER',
    	   'PS_MAIL_PASSWD',
    	   'PS_SHOP_NAME',
    	   'PS_MAIL_SMTP_ENCRYPTION',
    	   'PS_MAIL_SMTP_PORT',
    	   'PS_MAIL_METHOD',
    	   'PS_MAIL_TYPE'
    	  ), null, null, $id_shop);
    
    	  // Returns immediatly if emails are deactivated
    	  if ($configuration['PS_MAIL_METHOD'] == 3)
    	   return true;
    
    	  $theme_path = _PS_THEME_DIR_;	  // Get the path of theme by id_shop if exist
    	  if (is_numeric($id_shop) && $id_shop)
    	  {
    	   $shop = new Shop((int)$id_shop);
    	   $theme_name = $shop->getTheme();	
       if (_THEME_NAME_ != $theme_name)
    		$theme_path = _PS_ROOT_DIR_.'/themes/'.$theme_name.'/';
    	  }	  if (!isset($configuration['PS_MAIL_SMTP_ENCRYPTION']))
    	   $configuration['PS_MAIL_SMTP_ENCRYPTION'] = 'off';
    	  if (!isset($configuration['PS_MAIL_SMTP_PORT']))
    	   $configuration['PS_MAIL_SMTP_PORT'] = 'default';	
      // Sending an e-mail can be of vital importance for the merchant, when his password is lost for example, so we must not die but do our best to send the e-mail
    	  if (!isset($from) || !Validate::isEmail($from))
    	   $from = $configuration['PS_SHOP_EMAIL'];
    	  if (!Validate::isEmail($from))
    	   $from = null;	  // $from_name is not that important, no need to die if it is not valid
    	  if (!isset($from_name) || !Validate::isMailName($from_name))
    	   $from_name = $configuration['PS_SHOP_NAME'];
    	  if (!Validate::isMailName($from_name))
    	   $from_name = null;	
      // It would be difficult to send an e-mail if the e-mail is not valid, so this time we can die if there is a problem
    	  if (!is_array($to) && !Validate::isEmail($to))
    	  {
    	   Tools::dieOrLog(Tools::displayError('Error: parameter "to" is corrupted'), $die);
    	   return false;
    	  }	  if (!is_array($template_vars))
    	   $template_vars = array();	
      // Do not crash for this error, that may be a complicated customer name
    	  if (is_string($to_name) && !empty($to_name) && !Validate::isMailName($to_name))
    	   $to_name = null;	  if (!Validate::isTplName($template))
    	  {
    	   Tools::dieOrLog(Tools::displayError('Error: invalid e-mail template'), $die);
    	   return false;
    	  }	
      if (!Validate::isMailSubject($subject))
    	  {
    	   Tools::dieOrLog(Tools::displayError('Error: invalid e-mail subject'), $die);
    	   return false;
    	  }	  /* Construct multiple recipients list if needed */
    	  if (is_array($to) && isset($to))
    	  {
    	   $to_list = new Swift_RecipientList();
    	   foreach ($to as $key => $addr)
    	   {
    		$to_name = null;
    		$addr = trim($addr);
    		if (!Validate::isEmail($addr))
    		{
    		 Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die);
    		 return false;
    		}
    		if (is_array($to_name))
    		{
    		 if ($to_name && is_array($to_name) && Validate::isGenericName($to_name[$key]))
    		  $to_name = $to_name[$key];
    		}
    		if ($to_name == null)
    		 $to_name = $addr;
    		/* Encode accentuated chars */
    		$to_list->addTo($addr, '=?UTF-8?B?'.base64_encode($to_name).'?=');
    	   }
    	   $to_plugin = $to[0];
    	   $to = $to_list;
    	  } else {
    	   /* Simple recipient, one address */
    	   $to_plugin = $to;
    	   if ($to_name == null)
    		$to_name = $to;
    	   $to = new Swift_Address($to, '=?UTF-8?B?'.base64_encode($to_name).'?=');
    	  }
    	  try {
    	   /* Connect with the appropriate configuration */
    	   if ($configuration['PS_MAIL_METHOD'] == 2)
    	   {
    		if (empty($configuration['PS_MAIL_SERVER']) || empty($configuration['PS_MAIL_SMTP_PORT']))
    		{
    		 Tools::dieOrLog(Tools::displayError('Error: invalid SMTP server or SMTP port'), $die);
    		 return false;
    		}
    		$connection = new Swift_Connection_SMTP($configuration['PS_MAIL_SERVER'], $configuration['PS_MAIL_SMTP_PORT'],
    		 ($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'ssl') ? Swift_Connection_SMTP::ENC_SSL :
    		 (($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'tls') ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_OFF));
    		$connection->setTimeout(4);
    		if (!$connection)
    		 return false;
    		if (!empty($configuration['PS_MAIL_USER']))
    		 $connection->setUsername($configuration['PS_MAIL_USER']);
    		if (!empty($configuration['PS_MAIL_PASSWD']))
    		 $connection->setPassword($configuration['PS_MAIL_PASSWD']);
    	   }
    	   else
    		$connection = new Swift_Connection_NativeMail();	
       if (!$connection)
    		return false;
    	   $swift = new Swift($connection, Configuration::get('PS_MAIL_DOMAIN', null, null, $id_shop));
    	   /* Get templates content */
    	   $iso = Language::getIsoById((int)$id_lang);
    	   if (!$iso)
    	   {
    		Tools::dieOrLog(Tools::displayError('Error - No ISO code for email'), $die);
    		return false;
    	   }
    	   $template = $iso.'/'.$template;	   $module_name = false;
    	   $override_mail = false;	
       // get templatePath
    	   if (preg_match('#'.__PS_BASE_URI__.'modules/#', str_replace(DIRECTORY_SEPARATOR, '/', $template_path)) && preg_match('#modules/([a-z0-9_-]+)/#ui', str_replace(DIRECTORY_SEPARATOR, '/',$template_path), $res))
    		$module_name = $res[1];	   if ($module_name !== false && (file_exists($theme_path.'modules/'.$module_name.'/mails/'.$template.'.txt') ||
    		file_exists($theme_path.'modules/'.$module_name.'/mails/'.$template.'.html')))
    		$template_path = $theme_path.'modules/'.$module_name.'/mails/';
    	   elseif (file_exists($theme_path.'mails/'.$template.'.txt') || file_exists($theme_path.'mails/'.$template.'.html'))
    	   {
    		$template_path = $theme_path.'mails/';
    		$override_mail  = true;
    	   }
    	   if (!file_exists($template_path.$template.'.txt') && ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT))
    	   {
    		Tools::dieOrLog(Tools::displayError('Error - The following e-mail template is missing:').' '.$template_path.$template.'.txt', $die);
    		return false;
    	   }
    	   else if (!file_exists($template_path.$template.'.html') && ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML))
    	   {
    		Tools::dieOrLog(Tools::displayError('Error - The following e-mail template is missing:').' '.$template_path.$template.'.html', $die);
    		return false;
    	   }
    	   $template_html = file_get_contents($template_path.$template.'.html');
    	   $template_txt = strip_tags(html_entity_decode(file_get_contents($template_path.$template.'.txt'), null, 'utf-8'));	
       if ($override_mail && file_exists($template_path.$iso.'/lang.php'))
    		 include_once($template_path.$iso.'/lang.php');
    	   else if ($module_name && file_exists($theme_path.'mails/'.$iso.'/lang.php'))
    		include_once($theme_path.'mails/'.$iso.'/lang.php');
    	   else
    		include_once(_PS_MAIL_DIR_.$iso.'/lang.php');	   /* Create mail and attach differents parts */
    	   $message = new Swift_Message($subject);	
       /* Set Message-ID - getmypid() is blocked on some hosting */
    	   $message->setId(Mail::generateId());	   $message->headers->setEncoding('Q');	
       if (Configuration::get('PS_LOGO_MAIL') !== false && file_exists(_PS_IMG_DIR_.Configuration::get('PS_LOGO_MAIL', null, null, $id_shop)))
    		$logo = _PS_IMG_DIR_.Configuration::get('PS_LOGO_MAIL', null, null, $id_shop);
    	   else
    	   {
    		if (file_exists(_PS_IMG_DIR_.Configuration::get('PS_LOGO', null, null, $id_shop)))
    		 $logo = _PS_IMG_DIR_.Configuration::get('PS_LOGO', null, null, $id_shop);
    		else
    		 $template_vars['{shop_logo}'] = '';
    	   }	   /* don't attach the logo as */
    	   if (isset($logo))
    		$template_vars['{shop_logo}'] = $message->attach(new Swift_Message_EmbeddedFile(new Swift_File($logo), null, ImageManager::getMimeTypeByExtension($logo)));	
       $template_vars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME', null, null, $id_shop));
    	   $template_vars['{shop_url}'] = Context::getContext()->link->getPageLink('index', true, Context::getContext()->language->id);
    	   $template_vars['{my_account_url}'] = Context::getContext()->link->getPageLink('my-account', true, Context::getContext()->language->id);
    	   $template_vars['{guest_tracking_url}'] = Context::getContext()->link->getPageLink('guest-tracking', true, Context::getContext()->language->id);
    	   $template_vars['{history_url}'] = Context::getContext()->link->getPageLink('history', true, Context::getContext()->language->id);
    	   $template_vars['{color}'] = Tools::safeOutput(Configuration::get('PS_MAIL_COLOR', null, null, $id_shop));
    	   $swift->attachPlugin(new Swift_Plugin_Decorator(array($to_plugin => $template_vars)), 'decorator');
    	   if ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT)
    		$message->attach(new Swift_Message_Part($template_txt, 'text/plain', '8bit', 'utf-8'));
    	   if ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML)
    		$message->attach(new Swift_Message_Part($template_html, 'text/html', '8bit', 'utf-8'));
    	   if ($file_attachment && !empty($file_attachment))
    	   {
    		// Multiple attachments?
    		if (!is_array(current($file_attachment)))
    		 $file_attachment = array($file_attachment);		foreach ($file_attachment as $attachment)
    		 if (isset($attachment['content']) && isset($attachment['name']) && isset($attachment['mime']))
    		  $message->attach(new Swift_Message_Attachment($attachment['content'], $attachment['name'], $attachment['mime']));
    	   }
    	   /* Send mail */
    	   $send = $swift->send($message, $to, new Swift_Address($from, $from_name));
    	   $swift->disconnect();
    	   return $send;
    	  }
    	  catch (Swift_Exception $e) {
    	   return false;
    	  }
    	}	
    }	


  3. usunąć plik /cache/class_index.php

Kolejne wysyłane wiadomości będą już z czystym tytułem.

Pozdrawiam.

Edited by Piotr Kaczor (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Dzięki wielkie Piotrek, faktycznie jest tak jak mówisz i wszystko działa idealnie.

Maile przychodzą już z prawidłowym formatowaniem :)

Share this post


Link to post
Share on other sites

Witam.

Od jakiegoś czasu , a właściwie chyba od samego początku otrzymuję w tytule wiadomości .
Cytuję . Re: [] Potwierdzenie prośby o hasło
Wkurza mnie ten znak po Re: jak się go pozbyć.  A jest napisane na górze ( czyli problem rozwiązany )


Drugi problem Cytuję . Twoje hasło zostało zresetowane, a nowe wysłane na poniższy adres e-mail: sklep@olatoys.pl
ale ja nie jestem olatoys, nie mam takiego hasła. Co z tym jest nie tak ? Zamiast powinno wyświetlać się że hasło zostało wysłąne na mój adre email pokazuje email własciciela sklepu.

Pozdrawiam i prosze o pomoc.

Edited by grennet (see edit history)

Share this post


Link to post
Share on other sites

Siemka,

a zadziała to w Presta 1.6.0.8 czy kod juz trzeba mocno modyfikować?
Walczę ze zmianą pola 'FROM', które wyświetla się w miejscu 'nadawca' np.w skrzynce odbiorczej w gmailu i za nic mi to nie wychodzi.

Na chwilę obecną nazwa wygląda kretyńsko: część nazwy @ nazwa serwera.com część nazwy 2....

Share this post


Link to post
Share on other sites

Cześć :)
A jak wykonać taka modyfikację w presta 1.6.1.5?

Proszę o pomoc :)

Share this post


Link to post
Share on other sites

A jak to zmienić w wersji 1.6.1.7?

 

/* Create mail and attach differents parts */
            $subject = '['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] '.$subject;
            $message->setSubject($subject);
 
            $message->setCharset('utf-8');

Share this post


Link to post
Share on other sites

Zmiana w pliku .../classes/Mail.php

 

Konkretnie chodzi mi o usunięcie zawartości w nawiasie kwadratowym (wraz z nim) w temacie maila/powiadomienia.

Share this post


Link to post
Share on other sites

W 1.7 znaki [] są zapisane w tej linijce:

 /* Create mail and attach differents parts */
  $subject = '['.Configuration::get('PS_SHOP_NAME', null, null, $idShop).'] '.$subject;

 

Share this post


Link to post
Share on other sites

Sorki za lamerskie pytanie ale czy dla 1.7 nie wystarczy wyciąć ty kwadraciaków z tego pliku ? czy muszę tworzyć wszystko wg instrukcji kolegi Piotra. W zasadzie jak chciałem sie pozbyć z maili tekstu "Powe..... by Prestashop] to przejechałem pod linuchem jednym skryptem pliki txt i html z szablonami i działa - na szczście sie dało bo tych szablonów było z 500 szt i chyba bym umarł jakby trezba było ręcznie rzeźbić. Dlatego zastanawia mie czy poprostu nie wyciać ?

Share this post


Link to post
Share on other sites

Można wyciąć natomiast nie jest to trwałe rozwiązanie gdybyś w przyszłości chciał aktualizować sklep to zmiany zostaną nadpisane nowymi plikami.

  • Like 1

Share this post


Link to post
Share on other sites

Dziękuję za odpowiedzi, zależało mi na pozbyciu się długiej nazwy sklepu z tytułu maili. Finalnie wpisałem tam na sztywno nazwę skróconą i jest ok.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More