Can't attach file
solved
Hi there
I have a PDF File in the root directory of my prestashop. Which path do I have to add for E-Mail attachement? I tested so many paths but always: can't attach the file: file doesn't exist.
Any ideas how can I fix this?
Hi, the easiest way is to use full path. If your www files are stored inside
/var/www/html/
then use path
/var/www/html/file.pdf
Hi thanks for your answer.
When I add it like this... It doesn't work (see Screenshot).
This is the file.pdf which is placed in the prestashop directory. No subfolder or something.
So what else I can try? Also if I add the main link: https://www.welcomebabybox.ch/filde.pdf it doesn't find the file.
Thanks for your support.
All the best
Sorry, I mean this link: https://www.welcomebabybox.ch/file.pdf
It's possible that your webserver runs in some chroot environment, where the paths are mapped differently.
I have updated the attach file action to support relative filepaths as well. This will be part of next module release.
Meanwhile, you can edit file
modules/conseqs/actions/email-attach-file.php
and change it to look like this:
<?php
namespace Conseqs\Actions;
use Conseqs\Parameters\StringParameterDefinition;
use Conseqs\Action;
use Conseqs\RuntimeModifier;
use Conseqs\ParameterValues;
use Conseqs\ParameterDefinitions;
use PrestaShopException;
class EmailAttachFile extends Action
{
/**
* @return string
*/
public function getName()
{
return $this->l('Email: attach file');
}
public function getAllowedTriggers()
{
return [
'beforeEmailSent'
];
}
/**
* @return string
*/
public function getDescription()
{
return $this->l('Attaches custom file to email body');
}
/**
* @return ParameterDefinitions
*/
public function getSettingsParameters()
{
return ParameterDefinitions::none();
}
/**
* @param ParameterValues $settings
* @return ParameterDefinitions
*/
public function getInputParameters(ParameterValues $settings)
{
return new ParameterDefinitions([
'filename' => new StringParameterDefinition($this->l('Path to file')),
]);
}
/**
* @param ParameterValues $settings
* @param ParameterValues $input
* @param ParameterValues $triggerOutput
* @param RuntimeModifier $runtimeModifier
* @throws PrestaShopException
*/
public function execute(ParameterValues $settings, ParameterValues $input, ParameterValues $triggerOutput, RuntimeModifier $runtimeModifier)
{
$file = $this->resolveFilePath($input->getValue('filename'));
$runtimeModifier->adjustParameter('fileAttachment', function($attachments) use ($file) {
if (! $attachments) {
$attachments = [];
}
if ($attachments && !is_array($attachments)) {
$attachments = [ $attachments ];
}
$attachments[] = [
'name' => basename($file),
'content' => file_get_contents($file),
'mime' => mime_content_type($file)
];
return $attachments;
});
}
/**
* Returns path to file to be attached
*
* @param string $file
* @return string
* @throws PrestaShopException
*/
protected function resolveFilePath($file)
{
if (!is_string($file) || !$file) {
throw new PrestaShopException("Invalid file parameter");
}
$candidates = [
$file,
rtrim(_PS_ROOT_DIR_, '/') . '/' . ltrim($file, '/'),
rtrim(_PS_MODULE_DIR_, '/') . '/conseqs/' . ltrim($file, '/'),
rtrim(_PS_THEME_DIR_, '/') . '/' . ltrim($file, '/'),
];
foreach ($candidates as $candidate) {
if (file_exists($candidate) && is_file($candidate)) {
return $candidate;
}
}
throw new PrestaShopException("Can't attach file '$file' to email: file not exists");
}
}
Big thanks to you. I will try it and give you a feedback.
Thank you very much for your help... now it works great :-) !! Really good Module and Support!