How to send file using drupal_mail

To send a file using Drupal's drupal_mail function, you can use the attachments array to specify the file(s) to be sent. Here's an example:

function my_module_send_file($to, $subject, $body, $file_path) {
  $message = array(
    'to' => $to,
    'subject' => $subject,
    'body' => $body,
    'headers' => array('Content-Type' => 'text/plain; charset=UTF-8'),
  );
  $file = file_get_contents($file_path);
  $message['attachments'][] = array(
    'filename' => basename($file_path),
    'file' => $file,
  );
  drupal_mail('my_module', 'my_module_send_file', $to, $message);
}

In this example, the my_module_send_file function sends an email with a file attachment. The $file_path variable should be the path to the file you want to send.

You can also use the file_unmanaged_save_data function to save the file to a temporary location and then use the file_get_contents function to read the file contents. This can be useful if you need to send a large file and don't want to load the entire file into memory.

Here's an example:

function my_module_send_file($to, $subject, $body, $file_path) {
  $message = array(
    'to' => $to,
    'subject' => $subject,
    'body' => $body,
    'headers' => array('Content-Type' => 'text/plain; charset=UTF-8'),
  );
  $file_temp_path = file_unmanaged_save_data($file_path, 'temporary://');
  $file = file_get_contents($file_temp_path);
  $message['attachments'][] = array(
    'filename' => basename($file_path),
    'file' => $file,
  );
  drupal_mail('my_module', 'my_module_send_file', $to, $message);
  file_unmanaged_delete($file_temp_path);
}

In this example, the file_unmanaged_save_data function is used to save the file to a temporary location, and then the file_get_contents function is used to read the file contents. Finally, the file_unmanaged_delete function is used to delete the temporary file.

You can also use the file_create_file_object function to create a file object and then use the file_get_data function to get the file contents. This can be useful if you need to send a file with a specific MIME type or other metadata.

Here's an example:

function my_module_send_file($to, $subject, $body, $file_path) {
  $message = array(
    'to' => $to,
    'subject' => $subject,
    'body' => $body,
    'headers' => array('Content-Type' => 'text/plain; charset=UTF-8'),
  );
  $file = file_create_file_object($file_path);
  $message['attachments'][] = array(
    'filename' => $file->filename,
    'file' => file_get_data($file),
  );
  drupal_mail('my_module', 'my_module_send_file', $to, $message);
}

In this example, the file_create_file_object function is used to create a file object, and then the file_get_data function is used to get the file contents.