Drupal 7 mail met attachment

Problemen met het verzenden van attachments vanuit Drupal 7? Je bent vast niet de enige. Ik heb toch een tijdje moeten googlen om hier het kneepje van te leren kennen. Hieronder de oplossing zoals ik het werkend heb gekregen.

Benodigdheden

Implementatie

In mijn geval wilde ik een gegenereerd bestand verzenden vanuit een Rules action, getriggerd vanuit het event om in of uit te schrijven op een SimpleNews nieuwsbrief, maar het is toepasbaar vanuit elke functie.

De functie die de mail aanroep doet:

function mymodule_send_email() {
  $xml = file_get_contents($xml_file);
  $attachment = array(
    'filecontent' => $xml,
    'filename' => 'subscription.xml',
    'filemime' => 'application/xml',
  );
  $params['attachments'] = array($attachment);

 
  // drupal_mail($module_name, $key, $mail, $language, $params); 
  drupal_mail('mymodule', 'subscribe', $mailto,user_preferred_language($user), $params);

}

De functie de mail opbouw verzorgt:

/**
 * Implements hook_mail().
 */
function mymodule_mail($key, &$message, $params) {
  // HTML support for mail
  $message['headers']['Content-Type'] = 'multipart/mixed; text/html; charset=UTF-8; format=flowed;';

  switch ($key) {
    case 'subscribe':
      $message['subject'] = 'Newsletter subscription';
      $message['body'][] = 'Newsletter subscription body';
      $message['params']['attachments'] = $params['attachments'];
      break;
  }
}

En dat is het! Er is nog wel een caveat bij de attachments, nl. dat je òf de "filecontent" key gebruikt (als je de inhoud van het bestand hebt, maar misschien geen fysieke file) òf "filepath" (als je juist wel een file van je systeem wilt verzenden). 

back_blog