Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Email-Benachrichtigung bei neuem Node/Comment verschicken (selbstprogrammiert)

Eingetragen von talueng (48)
am 08.08.2010 - 14:13 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Ich möchte (ohne die Notification/Messaging Module zu nutzen) bei einem neuen Node bzw. einem neuen Kommentar automatisch eine Email-Benachrichtigung von Drupal verschicken lassen:

  • Node: Wenn ein bestimmtes CCK-Feld "Feature" gesetzt ist, soll eine Benachrichtigung an alle registrierten Benutzer verschickt werden.
  • Comment: Es soll eine Email-Benachrichtigung an den Autor des Node sowie an alle Benutzer, die bereits Kommentare hinterlassen haben, verschickt werden.

Fragen:
Welche hooks verwende ich (ich weiss, dass es hook_nodeapi und hook_comment gibt, aber ich komme mit den ganzen "op" nie zurecht)?
Wie verschicke ich die Email aus Drupal am besten?
Was passiert (Performance/Stabilität), wenn ich an ca. 400 registrierte Benutzer eine Benachrichtung verschicke?

‹ Modul gibt Block Inhalt eines anderen Moduls zurück [gelöst] Eigene .tpl Datei in eigenem Modul bereitstellen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Das könnte man eigentlich

Eingetragen von Exterior (2903)
am 08.08.2010 - 17:50 Uhr

Das könnte man eigentlich sehr bequem über Rules lösen, sowas funktioniert ziemlich gut und ist leicht umzusetzen.

Ansonsten:

Zitat:

Welche hooks verwende ich

Wie bereits erkannt: hook_nodeapi und hook_comment. Als $op muss man eben "insert" oder evtl. "submit" nehmen:

<?php
function mymodule_nodeapi(&$node, $op, $teaser = NULL, $page = NULL)
  {
    if (
$op == 'insert')
      {
       
//hier kommt dein Code für Nodes
     
}
  }

function
mymodule_comment(&$a1, $op)
  {
    if (
$op == 'insert')
      {
       
//hier kommt dein Code für Kommentare
     
}
  }
?>

Zitat:

Wie verschicke ich die Email aus Drupal am besten?

Verwende drupal_mail. Allerdings könnte man auch selbst mail() aufrufen oder eine Mailer-Klasse, z.B. PHP-Mailer, einbinden.

Zitat:

Was passiert (Performance/Stabilität), wenn ich an ca. 400 registrierte Benutzer eine Benachrichtung verschicke?

Keine Ahnung, kommt auch drauf an, wie du die Mails verschickst. Wenn du z.B. den Versand selbst in die Hand nimmst (und nicht drupal_mail verwendest), ist die Frage, ob du alle Empfänger in die Empfängerliste packst und dann einmal die eMail mit dieser Empfängerliste sendest oder ob du eine Schleife baust, in der du jeweils einen Empfänger einträgst und dann die Mail nur an diesen einzelnen schickst.

Also einmal Mail an 400 Empfänger senden oder 400 mal die Mail an einen Empfänger senden (was natürlich aufwändiger ist, allerdings finde ich diese Variante besser).

Aber bei 400 Leuten denke ich mal, dass es da noch keine Probleme geben dürfte, weder bei der einen noch bei der anderen Variante.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Empfehlung:

Eingetragen von sepp68 (444)
am 08.08.2010 - 18:23 Uhr

Kauf dir dieses Buch (am besten auf Englisch)

Pro Drupal Development

Dann ist alles ganz einfach ...

  • Anmelden oder Registrieren um Kommentare zu schreiben

1. Warum denn am besten auf

Eingetragen von Exterior (2903)
am 08.08.2010 - 19:00 Uhr

1. Warum denn am besten auf Englisch?

2. Glaubst du nicht auch, dass es ein wenig... oversized ist, sich dieses Buch zu holen, weil man eine Frage bezüglich Mailversand aus Drupal hat?

Das Buch an sich finde ich sehr gut (hab's auf deutsch, wüsste nicht, warum ich das erst übersetzen soll, wenn ich es auch gleich auf deutsch haben kann) aber das Problem kann man sicher auch lösen, ohne knapp 50 Euro auszugeben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Exterior schrieb 1. Warum

Eingetragen von sepp68 (444)
am 08.08.2010 - 20:54 Uhr
Exterior schrieb

1. Warum denn am besten auf Englisch?

Weil man dann auf drupal.org die Kommentare besser versteht (Hat mir zumindest viel gebracht)
.. und (nicht ganz ernst gemeint aber doch) weil es billiger ist (30,95 Euro)

Exterior schrieb

2. Glaubst du nicht auch, dass es ein wenig... oversized ist, sich dieses Buch zu holen, weil man eine Frage bezüglich Mailversand aus Drupal hat?

Weil man nach dem Durcharbeiten des Buches wirklich gut gerüstet ist um das Framework Drupal inklusive Modulentwicklung zu verstehen.
Ich denke, wenn man mal EIN Drupal-Modul schreibt, folgen bestimmt weitere.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Mmmh, das mit dem Englisch

Eingetragen von Exterior (2903)
am 08.08.2010 - 21:36 Uhr

Mmmh, das mit dem Englisch kann ich nicht ganz nachvollziehen aber gut, jedem das seine ;-)

Klar ist das Buch sehr hilfreich und ich würde es eigentlich allgemein jedem uneingeschränkt empfehlen. Aber für konkret diesen einen Fall (für den ja schon zwei Lösungen geschrieben wurden) ist es meiner Meinung nach unnötig. Denn die Frage bezieht sich ja nur darauf, wie man den Mailversand regelt. In dem Buch stehen schließlich noch ein Haufen anderer Sachen, Theming, Blöcke, Menüsystem usw.

Im blödesten Fall liest er sich das Buch durch (was auch erstmal einen gewisse Zeit erfordert, ist schließlich kein kleines Taschenbuch) und weiß dann immer noch nicht, wie man die Mails am besten versendet, falls dieses im Buch nie so ordentlich vorkommt ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Da ich das Buch nicht habe

Eingetragen von talueng (48)
am 09.08.2010 - 20:01 Uhr

Da ich das Buch nicht habe (und mir für diese Sache auch nicht zulegen wollte), wäre ich dankbar, wenn jemand das Email-System von D6 erläutern könnte. Ich weiss zwar mittlerweile, wie ich Emails mit drupal_mail_send() versende, allerdings umgeht das direkte Senden mittels dieser Funktion das eigentliche Email-System von D6, das wohl mit drupal_mail() u. a. arbeitet. Habe mir schon die API durchgelesen, aber bin noch nicht wirklich schlauer.

Ebenfalls wäre ich für eine schöne Lösung bzgl. von multi-language Emails dankbar, d. h. je nach eingestellter Benutzersprache soll die Email-Benachrichtigung in seiner Sprache versendet werden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Am einfachsten gehts mit

Eingetragen von caw (2762)
am 10.08.2010 - 06:25 Uhr

Am einfachsten gehts mit Rules

  • Anmelden oder Registrieren um Kommentare zu schreiben

Konnte es mittlerweile wie

Eingetragen von talueng (48)
am 17.08.2010 - 09:54 Uhr

Konnte es mittlerweile wie oben vorgeschlagen mit drupal_mail_send() lösen. Dazu habe ich aber folgende Frage:

Der Großteil meiner User schreibt Thai und damit nicht-lateinische Buchstaben. In der Email werden die komplett falsch dargestellt. Was mache ich da beim encoding der Emails falsch und wie mache ich es richtig?

Zitat:

John Doe commented on your gallery 'A little photo gallery' on Our Fancy Intranet [TM]:
"àž�àž±à¹�àž�àžªàžŽ àž�àž¹àž�à¹�àž¡à¹�àž­àž­àž�à¹�àž¥àž¢??"

  • Anmelden oder Registrieren um Kommentare zu schreiben

Setz die Datenbank auf

Eingetragen von Hyp1 (1463)
am 17.08.2010 - 10:11 Uhr

Setz die Datenbank Kodierung
und die Kodierung der Webseiten auf UTF-8
(HTTP Header)

LG

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dank Dir für Deine Antwort.

Eingetragen von talueng (48)
am 18.08.2010 - 13:50 Uhr

Dank Dir für Deine Antwort.

Letztlich lag es doch an einem falschen Email-Encoding. Hier der funktionierende Code (zu beachten ist, dass ich direkt drupal_mail_send() benutze und damit quasi das Drupal-Mail-System umgehe, dass mit hook_mail() arbeitet):

<?php

      $message
= array(
       
'to' => 'mail@example.com',
       
'subject' => 'Hello World',
       
'body' => 'Bla bla bla',
       
'headers' => array(
         
'From' => 'My Website <noreply@example.com>',
         
'MIME-Version' => '1.0',
         
'Content-Type' => 'text/plain; charset=UTF-8',
         
'Content-Transfer-Encoding' => '8Bit',
         
'X-Mailer' => 'Drupal'),
      );

     
$success = drupal_mail_send($message);

      if (!
$success) {
       
watchdog(
          ...
        );
      } else {
        ...
      }

?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Bitte als "gelöst" markieren

Eingetragen von talueng (48)
am 18.08.2010 - 18:29 Uhr

Bitte als "gelöst" markieren (dachte eigentlich, dass ich das als Thread-Ersteller selbst könnte).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kannst du doch auch. Einfach

Eingetragen von Exterior (2903)
am 18.08.2010 - 18:40 Uhr

Kannst du doch auch. Einfach ganz oben den ersten Beitrag bearbeiten und "[gelöst]" vor den Titel schreiben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

*lach* :-) Na gut, mir war

Eingetragen von talueng (48)
am 18.08.2010 - 23:41 Uhr

*lach* :-) Na gut, mir war nicht klar, dass das manuell gemacht wird. Ich dachte eigentlich, da existiert irgendein CCK-Dropdown oder ein Flag, um ein Thema mit dem entsprechendem Label zu versehen.

Anyways, ich lasse es doch noch erstmal so stehen, da sich noch eine Frage ergeben hat:

1) Wie kann ich am besten multi-language Emails versenden, d. h. je nach der Sprache, die ein Benutzer in seinem Profil ausgewählt hat, soll entweder "John Doe hat Deinen Blog kommentiert" bzw. "John Doe commented on your blog" verschickt werden?
2) Kann ich die t()-Funktion ineinander schachteln und dabei auch dynamische Strings, d. h. Variablen, in die Funktion packen? Laut API geht das nicht, aber wie kann ich dann folgendes übersetzen: $subject = $user . " commented on your " . $type;? Dabei ist $type der Content-Type der Node, also bspw. "blog" oder "gallery". Allerdings soll jetzt ein deutscher Benutzer nicht eine Email "John Doe hat Deine gallery kommentiert" kriegen, sondern eben "John Die hat Dein Photoalbum kommentiert". Insofern müsste ich etwas wie folgt machen, aber das ist laut API nicht erlaubt:

<?php
$subject
= t("!username commented on your !type", array(
 
'!username' => $user->name,
 
'!type' => t($type)
));
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Geht das nicht ?

Eingetragen von sepp68 (444)
am 19.08.2010 - 13:40 Uhr

<?php
$subject
= t("!username commented on your ", array( '!username' => $user->name)) . t($type);
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Probiers mal damit

Eingetragen von Hyp1 (1463)
am 19.08.2010 - 15:02 Uhr

<?php
$subject
= $user->name .t(" commented on your "). t($type)." !";
?>

Gruss

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 22 Stunden 42 Minuten
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Tag 14 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 5 Tagen
  • Hey danke
    vor 7 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 8 Wochen 7 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 17 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association