Ich versuche, Anhänge mit meiner E-Mail von Drupal zu senden. In meinem benutzerdefinierten Modul habe ich hinzugefügt:
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)
);
}
}
und ich kann Mails mit HTML senden, dieser Teil funktioniert.
Aber wenn ich versuche, eine Datei anzuhängen, kommt sie nicht in meinem Posteingang an. Ich hänge meine Testdatei so an:
$attachment = array(
'filecontent' => file_get_contents(DRUPAL_ROOT . '/README.txt'),
'filename' => 'test.txt',
'filemime' => 'text/plain',
);
Aber nichts kommt an.
Weiß jemand, wie ich es reparieren kann?
Antworten:
Möglicherweise gibt es andere Möglichkeiten, aber ich habe festgestellt, dass Mailsystem- und Mimemail- Module installiert werden müssen, um E-Mails mit Anhang zu senden. Installieren Sie also zuerst diese beiden Module.
Implementieren Sie dann hook_mail, um den Anhang an $ message zu übergeben
Es gibt zwei Möglichkeiten, einen Anhang hinzuzufügen: Sie können entweder den Dateicontent oder den Dateipfad übergeben, wenn Sie eine nicht verwaltete Datei als Anhang hinzufügen (nicht in der Datenbank aufgezeichnet), oder das Dateiobjekt übergeben, wenn Sie eine verwaltete Datei hinzufügen.
Beim Hinzufügen einer nicht verwalteten Datei:
oder
Wenn Sie filecontent way verwenden, werden Sie wahrscheinlich bis einschließlich 08.01.2015 zwei PHP-Fehler bekommen
Beim Hinzufügen einer verwalteten Datei:
Dann senden Sie eine E-Mail per:
quelle
Das hat bei mir funktioniert.
quelle
Ich erinnere mich, dass ich es schon einmal machen wollte, ich habe es versucht und für mich gearbeitet
quelle
file_get_contents()
hat den Trick für mich getan. Wenn ich es nicht verwende, erhalte ich beschädigte Dateianhänge. Vielen Dank.