Leser: 26
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
#!/usr/bin/perl -w use strict; use warnings; use IO::Handle; STDOUT -> autoflush (1); use CGI; ####################################### my %config = ( mailprog => '|/usr/sbin/sendmail -t', from_name => 'carsten1976', from_mail => 'carsten@weissichnicht.de', ); ####################################### my $q = CGI -> new; print $q -> header; my $fehler = ''; open my $mh,$config{mailprog} or $fehler = $!; if ($fehler eq '') { my $mail = "Mime-Version: 1.0\n"; $mail .= &MIMEENCODE ("From: $config{from_name} <$config{from_mail}>",'ISO-8859-1'); $mail .= &MIMEENCODE ("To: empfaenger\@domain.de",'ISO-8859-1'); $mail .= &MIMEENCODE ("Subject: Testmail äöüßÖÄÜ",'ISO-8859-1'); $mail .= "Content-Type: text/plain;\n charset=\"ISO-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n"; $mail .= &QP_ENCODE ('Guten Tag, dies ist ein kleiner Text für eine Mail'); print $mh $mail; close ($mh); print "Mail verschickt\n"; } else { print "Fehler >$fehler<\n"; } ####################################### sub MIMEENCODE() { return '' if !defined $_[0] || $_[0] eq ''; my $return = $_[0]; my $charset = $_[1] || 'ISO-8859-1'; my $noprint = "\\x00-\\x1F\\x7F-\\xFF"; my ($word,@lines); my $line = ''; $return =~ s{[a-zA-Z0-9\x7F-\xFF]{1,18}}{ $word = $&; (($word !~ /[$noprint]/o) ? $word : "=?$charset?Q?".&_encode($word,$noprint)."?="); }xeg; my @words = split(/ /,$return); foreach $word (@words) { my $sameword = 0; if (length($word) > 75) { while ($word) { if ($word =~ /^(.+?\?=)(=\?.*)$/) { &addword($1,\$line,\@lines,$sameword); $word = $2; } else { &addword($word,\$line,\@lines,$sameword); $word = ''; } $sameword = 1; } } else { &addword($word,\$line,\@lines,$sameword) } } push(@lines,$line."\n") if ($line); return substr(join('',@lines),1); sub addword { my ($word,$line,$lines,$sameword) = @_; if (!$sameword && $word =~ /^=\?[^\?]+?\?[Qq]\?(.+\?=)$/) { my $newword = $1; if ($$line =~ /^(.+)\?=$/) { $$line = $1.'_'; if (length($$line) + length($newword) > 75) { $$line .= '?='; push(@$lines,$$line."\n"); $$line = ' '.$word; } else { $$line .= $newword } return 0; } } if (length($$line) > 0 && length($$line) + length($word) > 75) { push(@$lines,$$line."\n"); $$line = ''; } $$line .= ' '.$word; } sub _encode { my ($str,$noprint) = @_; $str =~ s{[\?\=\_$noprint]}{sprintf("=%02X",ord($&))}eog; $str; } } ####################################### sub QP_ENCODE { my $text = shift; my $schneiden = shift || ''; my $blanks = shift || ''; $text =~ s/([^ \t\n!-<>-~])/sprintf("=%02X", ord($1))/eg; $text =~ s/([ \t]+)$/ join('', map { sprintf("=%02X", ord($_)) } split('', $1))/egm; $text =~ s/ /=20/g if $blanks; my $gebrochen = ''; if (!$schneiden) { $gebrochen .= "$1=\n" while $text =~ s/(.*?^[^\n]{73} (?: [^=\n]{2} (?! [^=\n]{0,1} $) |[^=\n] (?! [^=\n]{0,2} $) | (?! [^=\n]{0,3} $) ))//xsm; } return "$gebrochen$text"; }
Quotemain::MIMEENCODE() called too early to check prototype at sendmail.pl line 19.
2010-03-27T08:55:29 reneeÜbrigens gibt es auch Module, die das Encoding übernehmen können...
2010-03-27T16:01:30 Escape@Bianca
Der OP will HTML-Emails versenden.
Das funktioniert mit Deinem Code wohl weniger.
2010-03-29T10:22:37 GwenDragonIch nehme an, escape bezog sich auf dein Beispiel msg #135339, damit kann kein HTML-Mail versandt werden.
2010-03-29T12:58:29 GwenDragonZeige ihm doch bitte, wie er das per Hand programmiert mit einem HTML-Mail macht.
Das ist auch nützlich für andere, die keine Module verwenden wollen/können.
Quote%s() called too early to check prototype
(W prototype) You’ve called a function that has a prototype before the parser saw a
definition or declaration for it, and Perl could not check that the call conforms to
the prototype. You need to either add an early prototype declaration for the
subroutine in question, or move the subroutine definition ahead of the call to get
proper prototype checking. Alternatively, if you are certain that you’re calling the
function correctly, you may put an ampersand before the name to avoid the warning.
See perlsub.
QuoteBei UTF kann aber sowas nach hinten losgehen!Code: (dl )my $noprint = "\\x00-\\x1F\\x7F-\\xFF";
2010-04-17T16:26:10 carsten1976Can´t use an undefined value as a symbol reference at /../sendmail.pl line 16[/i]
Was bedeutet die Fehlermeldung?
2010-04-17T16:26:10 carsten1976Can´t use an undefined value as a symbol reference at /../sendmail.pl line 16
Was bedeutet die Fehlermeldung?
2010-04-17T16:59:03 pqaber ohne code eh schwer zu sagen.
2010-04-19T11:49:43 reneeIch habe zwar kein Perl 5.004, aber wenn ich mich recht erinnere gibt es lexikalische Filehandles erst später.
1 2 3 4 5 6 7
my $x = 1; if ($x) { my $fh; print $fh 23; }; __END__ Can't use an undefined value as a symbol reference at - line 4.
2010-04-19T11:51:59 pqich zeig dir mal was:
Code (perl): (dl )1 2 3 4 5 6 7my $x = 1; if ($x) { my $fh; print $fh 23; }; __END__ Can't use an undefined value as a symbol reference at - line 4.
2010-04-19T11:57:59 biancaHierzu hab ich nicht verstanden, was mir das sagen soll. Ist die Zeilennummer der Fehlermeldung nicht korrekt?
2010-04-19T12:07:12 biancaAchsooooooooooooo.
OK. Dann bitte keine Beispiel, wo man den Fehler garnicht sehen kann.
Dankeeeeeeeeeee
2010-04-19T12:08:08 pqaber wenn du keine hilfe mehr möchtest, bitte.
2010-04-19T12:06:28 biancaNicht wirklich. Steht der Text denn vor Deinem open auch schon in $! ?
2010-04-19T12:07:31 pqnein. aber warum interessiert dich das?
2010-04-19T12:13:40 biancaIch mache ja nicht open() und dann ein if $!....womit ich Gefahr laufe, einen $! Inhalt von vor dem open() zu haben. Das nicht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#!/usr/bin/perl -w use strict; use warnings; use Fcntl qw (:DEFAULT :flock); # pq: my $ok = sysopen (my $datei,'testdatei.test',O_WRONLY|O_APPEND); if ($ok) { print "Dateizugriff OK\n"; } else { print "Fehler $!\n"; } my $ok2 = sysopen (my $datei2,'testdatei.test',O_WRONLY|O_APPEND|O_CREAT); if ($ok2) { print "Dateizugriff OK\n"; } else { print "Fehler $!\n"; } # bianca (ungeeignet da beim zweiten sysopen noch der Fehler aus dem ersten in $! steht!): sysopen (my $datei3,'testdatei.test2',O_WRONLY|O_APPEND) or my $fehler = $!; if ($fehler eq '') { print "Dateizugriff2 OK\n"; } else { print "Fehler2 $fehler\n"; } sysopen (my $datei4,'testdatei.test2',O_WRONLY|O_APPEND|O_CREAT) or $fehler = $!; if ($fehler eq '') { print "Dateizugriff2 OK\n"; } else { print "Fehler2 $fehler\n"; }
1 2 3 4 5 6
if (sysopen (my $datei,'testdatei.test',O_WRONLY|O_APPEND)) { print "Dateizugriff auf $datei OK\n"; } else { print "Fehler $!\n"; }
2010-04-19T11:51:59 pqganz davon abgesehen ist deine überprüfung
if ($fehler eq '') {
falsch.
$! kann alles mögliche beinhalten. ich meine mich sogar zu erinnern, dass ich dir das schonmal gesagt hatte. benutze $! nur direkt in verbindung mit der überprüfung eines system-calls.
1
2
3
4
5
perl -wle'
open my $fh, ">","/dev/null" or die "Fehler beim öffnen: $!";
print "$!"'
Unpassender IOCTL (I/O-Control) für das Gerät
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$! If used numerically, yields the current value of the C "errno"
variable, or in other words, if a system or library call fails,
it sets this variable. This means that the value of $! is
meaningful only immediately after a failure:
if (open(FH, $filename)) {
# Here $! is meaningless.
...
} else {
# ONLY here is $! meaningful.
...
# Already here $! might be meaningless.
}
# Since here we might have either success or failure,
# here $! is meaningless.
2010-04-19T12:00:51 biancaFindest Du auf die Schnelle wieder, wo wir das letztens behandelt haben, würde das gern mal abschließend mir aufschreiben, wie man damit umgeht.
2010-04-19T12:13:52 pqmsg #131968 ff. enjoy
2010-04-19T11:42:44 biancaWarum installierst du kein ActivePerl 5.004 bei dir? Es ist doch auch unter Windows möglich, mehrere Perl-Versionen nebeneinander zu verwenden.Hat zufällig noch jemand so ein uraltes Perl installiert und würde das mal bei sich laufen lassen, was da los ist?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use MIME::Lite; my $msg = MIME::Lite->new( To =>'you@yourhost.com', Subject =>'HTML with in-line images!', Type =>'multipart/related' ); $msg->attach( Type => 'text/html', Data => qq{ <body> Here's <i>my</i> image: <img src="cid:myimage.gif"> </body> }, ); $msg->attach( Type => 'image/gif', Id => 'myimage.gif', Path => '/path/to/somefile.gif', ); $msg->send();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use Email::MIME::CreateHTML; my $email = Email::MIME->create_html( header => [ From => 'my@address', To => 'your@address', Subject => 'Here is the information you requested', ], body => $html, text_body => $plain_text ); use Email::Send; my $sender = Email::Send->new({mailer => 'SMTP'}); $sender->mailer_args([Host => 'smtp.example.com']); $sender->send($email);
2010-03-28T18:04:04 frankesSinn macht es allerdings, zumindest MIME::Base64 installiert zu haben.