SendMail mit Anhang
Ich möchte gerne meine Rechnung per Button verschicken. An die Email müsste aber dann die Rechnung als PDF. Den Befehl SendMail kenne ich und auch den Befehl um ein Dokument zu erstellen. Nur wie bekomme ich den Anhang an die Email ?
55 Antworten
-
sendmail({
from: MeineMail,
to: DeineMail,
[...]
attachments: MeineDatei
});
-
Ups, die Funktion heißt natürlich sendEmail().
-
attachments: MeineDatei, bezieht sich dann auf die Datei die als Dokument am Datensatz hängt , oder ?
-
Das ist der Name, den du bei importFile() angegeben hast. Hier mal ein komplettes Beispiel, bei dem der Dateiname aus der Rechnungsnummer generiert wird ("Rechnung" ist das Drucklayout):
let DateiName := Rechnungsnummer + ".pdf";
let DateiAnhang := importFile(this, printAndSaveRecord(this, "Rechnung"), DateiName);
sendEmail({
from: "MeineMail@Meinserver.tld",
to: "DeineMail@deinserver.tld",
cc: "AndereMail@andererserver.tld",
subject: "Rechnung " + DateiName,
text: "Moin, anbei meine Rechnung " + DateiName + ". Grüße, Ihr Lieferant",
attachments: DateiAnhang
});Statt der Variablen könnte man auch eine Datei direkt ansprechen:
attachments: "Jahresbericht2018.pdf"
Oder bspw. auch alle angehängten Dateien versenden:
attachments: files(this)
Ach so, das "cc" funktioniert aktuell noch nicht (wird einfach ignoriert), soll aber bald funktionieren.
Alle Angaben wie immer ohne Gewähr. ;)
-
Super das funktioniert. Vielen Dank schonmal.
Er bringt mir noch ein Fehler, das er die Datei nicht finden kann. Kann ich eine "Waitstep" einbauen.
-
Ist die Fehlermeldung aus der Cloud-Version? Dazu kann ich leider gar nichts sagen, bei mir hat es problemlos funktioniert. Das wäre eher ein Fall für den Support oder die echten Cracks.
Bei "Waitstep" weiß ich jetzt auch nicht genau, was du meinst. Vielleicht sowas:
-
Nein bin in der MAC App aber an die cloud angebunden.
Ja das er nach dem Befehl Datei erstellen 5 Sekunden wartet bevor er die Email versendet
-
oder ich muss die 2 Schritte trennen. D.h. ein button zum erstellen der Datei und den 2. für das versenden
-
Bei der Konstellation mit Mac-App bin überfragt. Vielleicht kann dazu jemand was sagen, der auch mit Mac-App plus Cloud arbeitet.
Davon abgesehen: Warum sollte 5 Sekunden gewartet werden? Worauf? Was soll in der Zeit passieren?
-
Hat sich überschnitten. Ja, zwei einzelne Schritte wären natürlich möglich.
-
Habe mit dem Support gesprochen. wenn ich eine Lösung habe, werde ich Sie hier online stellen.
-
-
In meinen Datensätzen werden mehrere PDF erstellt. Die kommen z.B. aus diversen Untertabellen hinzu zum "Haupt PDF" der Hauptmaske. Die muss ich noch händisch aus den einzelnen Untertabellen herausfischen und wieder in der Haupttabelle als Datei anhängen um alle PDF Dokumente eines Datensatzes auf einen Blick zu haben.
Soweit ich weiss, gibts hier noch keine Automatsierungsmöglichkeit all diese PDF aus den Untertabellen automatisch zusammen in einer "Haupttabelle" hinten am Dateianhang zu sammeln. Wenn das möglich wäre, würde für mich sogar die Ninox Cloud interessant, da ich dann alle PDF per send mail Button direkt aus Ninox zu ihren Empfängern schicken könnte. Noch genialer wäre auch wenn diese PDF automatisiert zu einem zip File verpackt und dann an die Mail angehangen werden könnten.
-
Den selben Fehler habe ich nun auch. Solang ich das PDF nicht unbenannt hatte, funktionierte es. Jetzt wo Ninox dem PDF beim generieren einen eigenen Namen gibt und danach versenden soll, kommt der selbe Fehler wie er hier schon dargestellt wurde. Muss man wirklich 2 Buttons für die eine Aktion erstellen?
-
Verwenden Sie die Funktion
–––
do as server
...
end
–––
-
?
-
Die Funktion muss (als Klammer) um dein bisheriges Statement, z. B.:
do as sever
send e-mail(.......
.......
end
Gruß, Jörg
-
Danke Jörg.
Heute stundenlang alles Mögliche probiert. Keine Chance mit der Mac Version von Ninox das in einem Ablauf (Button) unterzubringen. Selbst getrennt mit 2 Buttons muss man mind. 5-7 Sekunden warten bevor man die Mail senden kann nach dem generieren der PDF Dateien (habe 3 PDF versucht mit etwas mehr Inhalt wie Bildern usw.)
Ob mit oder ohne "do as server" vor SendMail, auch vor den anderen Scripts mal probiert usw. Keine Chance. "Socket hang up" ist dann auch eine Meldung die gern kommt.
In der Browserversion von Ninox dagegen kein Problem. Dort bleibt der Button eine Weile verfärbt während Ninox herum rödelt und dann kommen auch schon die Mails mitsamt Anhängen an. Die Ninox Mac Version schafft es anscheinend nicht schnell genug die Dateianhänge auf den Ninox Server zu laden und SendMail greift dann ins Leere. Es müsste eine Warteschleife möglich sein oder Ninox müsste erkennen, dass die Dateien noch nicht da sind und warten.
-
Hi Folks,
hatte das gleiche Problem mit dem Versand von speziellen Files. Für ein einzelnes File (PDF Versand per eMail) folgende Lösung:
let Filename := "MP_Bogen.pdf";
let DSNr := Nr;
let VersandFile := "C" + text(DSNr) + "/" + Filename;
importFile(this, printAndSaveRecord(this, "(01)MPBogen"), Filename);
if 'Sachbearbeiter Sofortrechnng' != null then
alert("Mail bereit für Versand !");
FilenameSRupload := Filename;
sendEmail({
from: "meine-email@mail.com",
to: 'Sachbearbeiter Sofortrechnng'.'E-Mail',
subject: "Subjecttext",
text: 'eMailtext",
attachments: VersandFile
})
endDer Trick: Für den Dateinamen kann man nicht den reinen Dateinamen aus dem importFile Befehl nehmen. Ninox speichert die Dateien anscheinend unter einem Verzeichnis ab, das mit einem großen "C" beginnt, dann die DatensatzID (.Nr) und dann "/"
setzt man nun den Dateinamen für das attachment wie folgt zusammen:
Dateiname := "C" + [Datensatz.Nr] + "/" + [Filename aus dem importFile]
und as dann als
attachments: Dateiname
wird das PDF problemlos angehängt und verschickt, und das ganz ohne Warteschleifen :)
Gruß,
Alex
-
Ergänzung:
bei dem Codebeispiel steht der sendmail befehl in einer If-Schleife, wo geprüft wird, ob überhaupt eine eMail-Adresse vorliegt. Also nicht verwirren lassen.
-
2. Nachtrag:
Erfolgreich getestet für
-Mac-App
-iPad-App
-Web-App
hat in allen drei Varianten funktioniert.
-
Noch ein Nachtrag: der vorangestellte Buchstabe (in dem obigen Beispiel "C") ist für jede Tabelle anders, könnt ihr über ein Funktionsfeld mit
concat(files(this))
ausleisen. Da werden euch die gespeicherten Files mit dem vorangestellten Verzeichnis angezeigt.
-
Es ist ein bisschen anders, Ninox benennt die Tabellen intern mit A,B,C....... Die Dateien werden intern tatsächlich so benannt
Tabellen Bezeichnung+ID+"/"+Dateiname
In deinem Fall ist die Tabelle "C", es kann aber auch A oder B sein.
Leo
-
Oh, ich habe deinen letzten Post übersehen.
-
Immerhin ist man dem Problem auf der Spur...
Ich habe ja zudem noch Leos schöne Formel hinter attachements hängen:
--- attachments: for ff in for jj from 0 to cnt(files(this)) do
let ii := item(files(this), jj);
let IN := index(text(ii), "/") + 1;
let myName := substr(text(ii), IN);
if substr(myName, 0, 2) = "AA" or substr(myName, 0, 2) = "BB" or substr(myName, 0, 2) = "CC" or substr(myName, 0, 2) = "DD" or substr(myName, 0, 2) = "EE" or substr(myName, 0, 2) = "FF" then
jj
end
end do
item(files(this), ff)
end ---Diese sucht bei mir die PDF Dateien mit den ersten beiden Buchstaben AA, BB, CC usw. im Dateinamen und wenn vorhanden hängt es die an die Mail, alle anderen Dateien im Dateianhang werden beim Versand ignoriert.
Ich traue mich gar nicht mehr den Code hier da nun noch rein zu wurschteln und wüsste adhoc auch gar nicht wo ich den genau wie noch einbauen sollte damit auch Leos geniale Suchfunktion nach den korrekten Dateien erhalten bleibt. Mein System arbeitet was SendMail angeht seit einigen Tagen produktiv und ich bin nun natürlich sehr vorsichtig mit Basteleien im SendMail Bereich...
Content aside
- vor 1 JahrZuletzt aktiv
- 55Antworten
- 15783Ansichten
-
1
Folge bereits