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

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

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