2010-08-22 45 views
5

Tengo un formulario personalizado (creado con API de formulario) que necesita enviar un archivo cargado por correo electrónico. El manejador de envío de formulario actual envía el correo electrónico sin datos adjuntos usando drupal_mail().Envío de correo electrónico con el archivo adjunto

Así que estoy buscando una solución para enviar adecuadamente el correo electrónico con datos adjuntos de Drupal. Mime Mail parece una exageración porque el correo HTML, las plantillas y sus otras características no son necesarios. Pero la única alternativa que veo es establecer los encabezados adecuados y serializar el archivo adjunto en el cuerpo del correo cuando procese el correo en mi implementación hook_mail().

¿Echo de menos algo? ¿Hay algún módulo para manejar esto?

+1

Solo quiero agregar que el correo se enviará como un correo MIME de todos modos cuando adjunte archivos. Entonces, la parte HTML no es "exagerada", probablemente sea el mismo código que el código adjunto. –

+0

No necesito/quiero que el cuerpo del correo esté en HTML, solo necesito/quiero un correo electrónico de texto plano con archivos adjuntos.Algo más está fuera del alcance y no quiero que me obliguen a tratarlo. –

+0

dependiendo del resultado aquí: http://meta.stackexchange.com/questions/110752/should-we-migrate-questions-to-an-on-topic-site-if-the-asker-requests usted puede decidir señalarlo de nuevo. Descartar por ahora. –

Respuesta

3

Mimemail es la solución más fácil aquí. Ya sea una sobrecarga o no, te permitirá hacerlo con una sola llamada a función.

Si insiste, puede hacer que su attachment sender casera: base64 codifique sus archivos adjuntos, agréguelos al cuerpo del correo, agregue los encabezados correctos y listo.

0

El Webform module le permite crear un formulario y tiene una opción de archivo que se puede utilizar como archivo adjunto. Todos los componentes de formulario disponibles se enumeran en el módulo manual page.

Una vez instalado, Webform aparecerá como un tipo de contenido. Una vez que haya guardado los fundamentos, como el título y el correo electrónico a la dirección, tendrá la posibilidad de agregar los componentes de formulario requeridos.

Agregue un componente del tipo 'archivo', asegurándose de que la opción 'correo electrónico' (al destinatario) esté marcada, y luego podrá personalizar los tipos de archivo, extensiones, tamaños y la carpeta de carga permitidos.

+0

Sí, sé que Webform puede hacerlo. Pero dado que se trata de un único formulario de desarrollo y construcción no modificado por el usuario final del sitio, no se ajusta al caso de uso básico de formulario web. Me gustaría evitar tener que cargar toda la pila de formas editables de UI de Webform para un solo formulario que también tiene otro proceso (varias actualizaciones de DB) para hacer. –

+0

Ahora díganos; 0) – CitrusTree

+0

Por supuesto, simplemente no podría dar a los otros usuarios el permiso para administrar Webforms: 0) – CitrusTree

0

Puede usar Zend Framework.

function sendEmail($params){ 
    ini_set('include_path', 'inc/'); 
    require_once ('inc/Zend/Mail.php'); 

    $mail = new Zend_Mail(); 

    $mail->setSubject($params['subject']); 

    $mail->setBodyText($params['bodyText']); 
    $mail->setBodyHtml($params['bodyHtml']); 

    $mail->setFrom($params['fromEmail'], $params['fromName']); 
    $mail->addTo($params['toEmail'], $params['toName']); 

    // Finally, add an attachment 

    assert(file_exists($params['attachFile'])); 

    $at = $mail->addAttachment(file_get_contents($params['attachFile'])); 
    $at->type  = $params['attachType']; 
    $at->disposition = Zend_Mime::DISPOSITION_ATTACHMENT; 
    $at->filename = $params['attachName']; 

    $mail->send(); 
} 
+0

¡Gracias por la actualización! – SteAp

1

Puede usar mime mail y forzar que el cuerpo del mensaje se envíe en formato de texto plano. Aquí hay un extracto del archivo Léame del módulo:

USO Este módulo puede ser requerido por otros módulos, pero no es terriblemente útil por sí mismo. Una vez instalado, cualquier módulo puede enviar mensajes por llamar a la función mimemail():

$sender - a user object, text email address or an array with name, mail 
$recipient - a user object, text email address or an array with name, mail 
$subject - subject line 
$body - body text in HTML format 
$plaintext - boolean, whether to send messages in plaintext-only (default FALSE) 
$headers - a keyed array with headers (optional) 
$text - plaintext portion of a multipart e-mail (optional) 
$attachments - array of arrays with the file's path, MIME type (optional) 
$mailkey - message identifier 

return - an array containing the MIME encoded message 

La clave es establecer el argumento de texto plano $ TRUE. Ahora puedes tener tu pastel y comértelo también.

0

Siempre puede echar un vistazo al módulo Swift Mailer que le permite enviar correos electrónicos HTML (MIME), correos electrónicos con imágenes en línea y correos electrónicos con archivos adjuntos. También es posible generar automáticamente versiones de texto sin formato basadas en la versión de correo electrónico HTML, que al final permitirá que el cliente de correo electrónico del usuario muestre la versión preferida (HTML o texto sin formato).

El módulo Swift Mailer está disponible en http://drupal.org/project/swiftmailer.

Para el registro: Soy el autor y el encargado del mantenimiento del módulo.

Cuestiones relacionadas