Estoy tratando de enviar archivos adjuntos con mi correo electrónico desde Drupal. En mi módulo personalizado he agregado:
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)
);
}
}
y puedo enviar correos con html, esa parte está funcionando.
Pero cuando intento adjuntar un archivo, no llega a mi bandeja de entrada. Adjunto mi archivo de prueba así:
$attachment = array(
'filecontent' => file_get_contents(DRUPAL_ROOT . '/README.txt'),
'filename' => 'test.txt',
'filemime' => 'text/plain',
);
Pero no llega nada.
Alguien sabe cómo puedo solucionarlo?
Respuestas:
Puede haber otras formas, pero he descubierto que los módulos de sistema de correo y mimemail deben instalarse para enviar correos electrónicos con archivos adjuntos. Instale estos dos módulos primero.
Luego implemente hook_mail para pasar el archivo adjunto a $ mensaje
Hay dos formas de agregar archivos adjuntos, puede pasar contenido de archivo o ruta de archivo al agregar un archivo no administrado como archivo adjunto (no registrado en DB) o pasar un objeto de archivo al agregar un archivo administrado.
Al agregar un archivo no administrado:
o
Al utilizar la forma de contenido de archivo, es probable que obtenga dos errores de php antes del 08 de enero de 2015, incluidos
Al agregar un archivo administrado:
Luego envíe un correo electrónico por:
fuente
Esto funcionó para mí.
fuente
Recuerdo que quería hacerlo antes, probé esto y funcionó para mí
fuente
file_get_contents()
hizo el truco para mí si no lo usaba, estaba obteniendo archivos adjuntos corruptos. Gracias.