Ich versuche, ein Skript mit Net::IMAP::Client zu schreiben, das den Inhalt einer E-Mail ausgibt, aber bisher wird jede Variable, die ich aus dem Modul ausgeben will, als etwas wie: ARRAY(0x86f5524) angezeigt oder gibt einen Fehler "Kann einen undefinierten Wert nicht als SCALAR-Referenz verwenden."
Die Modul-Dokumentation sagt, dass
# Vollständige Nachrichten abrufen
my @msgs = $imap->get_rfc822_body([ @msg_ids ]);
print $$_ for (@msgs)
Verweise auf einen Skalar enthalten sollte. @msg_id sollte ein Array von Zahlen für die E-Mail-Nummer im Posteingang sein, wird aber auch als Array-Referenz zurückgegeben.
Ich bin unsicher, wie ich diese Daten richtig ausgeben kann, damit sie lesbar sind. Hier ist die Modul-Referenz: Net::IMAP::Client
und hier ist ein Ausschnitt meines Codes:
use Net::IMAP::Client;
use Net::IMAP;
use Net::SMTP;
use strict;
use warnings;
my $imap = Net::IMAP::Client->new(
server => ,
user => , # Ich habe diese Daten aus Datenschutzgründen weggelassen
pass => ,
ssl => ,
port => ,
) or die "Konnte keine Verbindung zum IMAP-Server herstellen";
$imap->login or die('Anmeldung fehlgeschlagen: ' . $imap->last_error);
my $num_messages = $imap->select('[Gmail]/All Mail');
my @msg_id = $imap->search('ALL');
print @msg_id;
print "\n";
my @data = $imap->get_rfc822_body([@msg_id]);
print $$_ for (@data);
EDIT: Ich habe Data::Dumper verwendet und einen großen Block mit Text erhalten, der die E-Mail und alle Formatierungstags enthält. Ich weiß auch, dass $imap->search etwas zurückgeben sollte, da der Posteingang 4 E-Mails enthält, 2 davon ungelesen sind. Aber da die Variable @data die E-Mails enthält, kann ich nicht herausfinden, wie ich sie im Output richtig dereferenzieren soll
0 Stimmen
Print Data::Dumper( \@data ) wird dir sagen, was im Rückgabewert von $imap->get_rfc822_body([@msg_id]) ist. Klingt so, als ob du nichts zurückbekommst.
0 Stimmen
$imap->search kann potenziell undef zurückgeben. Überprüfen Sie also zunächst, ob Sie einige Daten abgerufen haben.