J'essaie d'envoyer des pièces jointes avec mon e-mail depuis Drupal. Dans mon module personnalisé, j'ai ajouté:
class SponsorprogramMailSystem implements MailSystemInterface {
/**
* Concatenate and wrap the e-mail body for plain-text mails.
*
* @param $message
* A message array, as described in hook_mail_alter().
*
* @return
* The formatted $message.
*/
public function format(array $message) {
$message['body'] = implode("\n\n", $message['body']);
return $message;
}
/**
* Send an e-mail message, using Drupal variables and default settings.
*
* @see http://php.net/manual/en/function.mail.php
* @see drupal_mail()
*
* @param $message
* A message array, as described in hook_mail_alter().
* @return
* TRUE if the mail was successfully accepted, otherwise FALSE.
*/
public function mail(array $message) {
$mimeheaders = array();
foreach ($message['headers'] as $name => $value) {
$mimeheaders[] = $name . ': ' . mime_header_encode($value);
}
$line_endings = variable_get('mail_line_endings', MAIL_LINE_ENDINGS);
return mail(
$message['to'],
mime_header_encode($message['subject']),
// Note: e-mail uses CRLF for line-endings. PHP's API requires LF
// on Unix and CRLF on Windows. Drupal automatically guesses the
// line-ending format appropriate for your system. If you need to
// override this, adjust $conf['mail_line_endings'] in settings.php.
preg_replace('@\r?\n@', $line_endings, $message['body']),
// For headers, PHP's API suggests that we use CRLF normally,
// but some MTAs incorrectly replace LF with CRLF. See #234403.
join("\n", $mimeheaders)
);
}
}
et je peux envoyer des mails avec html, cette partie fonctionne.
Mais lorsque j'essaie de joindre un fichier, il n'arrive pas dans ma boîte de réception. J'attache mon fichier de test comme ceci:
$attachment = array(
'filecontent' => file_get_contents(DRUPAL_ROOT . '/README.txt'),
'filename' => 'test.txt',
'filemime' => 'text/plain',
);
Mais rien n'arrive.
Quelqu'un sait comment je peux le réparer?
Réponses:
Il pourrait y avoir d'autres moyens, mais j'ai constaté que les modules de système de messagerie et de messagerie électronique doivent être installés pour envoyer des e-mails avec pièce jointe. Installez donc ces deux modules en premier.
Ensuite, implémentez hook_mail pour passer la pièce jointe à $ message
Il existe deux façons d'ajouter une pièce jointe: vous pouvez transmettre le contenu du fichier ou le chemin d'accès au fichier lors de l'ajout d'un fichier non géré en tant que pièce jointe (non enregistré dans la base de données) ou transmettre l'objet fichier lors de l'ajout d'un fichier géré.
Lors de l'ajout d'un fichier non géré:
ou
En utilisant la méthode filecontent, vous obtiendrez probablement deux erreurs php d'ici le 8 janvier 2015, y compris
Lors de l'ajout d'un fichier géré:
Envoyez ensuite un e-mail par:
la source
Cela a fonctionné pour moi.
la source
Je me souviens que je voulais l'avoir fait avant, j'ai essayé et j'ai travaillé pour moi
la source
file_get_contents()
a fait l'affaire pour moi. sinon, je recevais des pièces jointes corrompues. Merci.