Mails über SMTP verschicken (GMX)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
absender
account
ahnung
beitrag
beschrieb
betreff
fehlermeldung
funktion
luzerne
mail
mailbox
message
nutzen
response
sender
socket
unterschied
username
variant
zugang
-
Hi,
Also ich hab da nen Code mit dem ich meine Mails verschicken will.
Aber das Problem ist
1. schickt er mir den Absender nicht mit ($sender)
2. schickt er mir den Inhalt nicht mit ($content)
????
Hier der Code:
<?php
$smtp_server = "smtp.gmx.de";
$port = 25;
$mydomain = "localhost";
$username = "sender@gmx.net";
$password = "blabla";
$sender = $username;
$recipient = "empfaenger@gmx.de";
$subject = "Betreff";
$content = "Nachricht";
// Initiate connection with the SMTP server
$handle = fsockopen($smtp_server,$port);
fputs($handle, "EHLO ".$mydomain."\n");
// SMTP authorization
fputs($handle, "AUTH LOGIN\n");
fputs($handle, base64_encode($username)."\n");
fputs($handle, base64_encode($password)."\n");
// Send out the e-mail
fputs($handle, "MAIL FROM: ".$sender."\n");
fputs($handle, "RCPT TO: ".$recipient."\n");
fputs($handle, "DATA\n");
fputs($handle, "To: ".$recipient."\n");
fputs($handle, "Subject: ".$subject ."\n");
fputs($handle, $content."\n");
fputs($handle, ".\n");
// Close connection to SMTP server
fputs($handle, "QUIT\n");
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
echo(fgets($handle))."<br>";
?>
Außerdem hab ich noch das Problem, wenn ich meine Mails abrufe (über imap_open etc.) und meine Mailbox/Posteingang ist leer, bringt er mir folgende Meldung:
Notice: Unknown: Mailbox is empty (errflg=1) in Unknown on line 0
Wie kann ich die unterdrücken? Mit @ vor den Funktionen funktioniert das nicht.
Danke. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ich hab keine Ahnung wie das senden über die Imap-Funktionen geht. Ich habs mal so probiert, aber das geht nich.
$server = "{pop.gmx.de/pop3:110}INBOX";
$mailbox = imap_open($server, $ktname, $paswd);
imap_mail($mail_empfaenger, $betreff,$text,"from:$mail_absender");
imap_close($mailbox);
den anderen code hab ich ausm Internet, und er funktioniert ja auch im Prinzip, aber er sendet nur den absender und Inhalt nicht -
Die Mail() Funktion ist hier immer noch abgeschaltet oder täusche ich mich?
Denn mein PHP-Script verschickt auch nichts ;(
Welche Möglichkeit habe ich denn noch um von meiner Webseite hier auf lima eine Mail zu versenden? Ich hab da noch nicht so den großen Plan von.
Beitrag geaendert: 28.4.2007 0:43:11 von karpfen -
Die Mail() Funktion ist hier immer noch abgeschaltet oder täusche ich mich?
Denn mein PHP-Script verschickt auch nichts ;(
Die Mail-Funktion geht glaube ich.
Nur fopen geht nicht.
Und bei seinen Skript braucht er das.
luzerne-sprossenzucht schrieb:
$server = '{pop.gmx.de/pop3:110}INBOX';
Versuch mal: $server = '{pop.gmx.de:110/pop3}INBOX';
Wobei du pop3 glaube ich garnicht angeben brauchst.
Jens
Beitrag geaendert: 28.4.2007 0:44:57 von jacr -
Also ich habe hier in meinem Script die mail()-Funktion in Gebrauch und es wird keine E-mail verschickt. Auf einem anderen Server ging das noch. Ich hab auch nichts geändert. Deshalb frage ich.
-
also ich hab mir n anderes script gezogen, mit dem man über smtp mails verschiecken kann, auch bei lima ich poste es euch mal hier, weil die mail()-funktion sowie die imap-funktionen hier nicht funktionieren.
Der code funktioniert und ist getestet. Ihr könnt ihn grad auf der seite einfügen wo ihr mails schicken wollt, oder extern und dann über include() einbeziehen und grad der funktion smtpmail() - die im prinzip wie mail() aufgebaut ist - empfänger, betreff, message und header verpassen.
Ihr müsst halt noch eure daten (smtp-server, absender etc.) in der funktion smtpmail() eintragen (ich mache das auch extern (datenbank), damit ich die daten, wenn ich sie mehrfach verwende an einer stelle ändern kann)
Ich hab nur noch keinen code gefunden, der mir das auf die gleiche weise mit dem empfang macht (wie gesagt, imap geht hier nicht), wenn ihr was hättet, wäre nett...
Code:
<?php
function server_parse($socket, $response, $line = __LINE__)
{
$server_response = '';
while (substr($server_response, 3, 1) != ' ')
{
if (!($server_response = fgets($socket, 256)))
{
echo 'Couldn\'t get mail server response codes<br />';
}
}
if (!(substr($server_response, 0, 3) == $response))
{
echo "Ran into problems sending Mail. Response: $server_response<br />";
}
}
function smtpmail($mail_to, $subject, $message, $headers)
{
$smtp_host = ''; //zb 'mail.gmx.net'
$smtp_username = $absender = ''; //eure eigene email-adresse
$smtp_password = ''; //passwort eurer email
$smtp_user = ''; //der name der zusätzlich als absender neben der adresse
//erscheint
$message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);
if ($headers != '')
{
if (is_array($headers))
{
if (sizeof($headers) > 1)
{
$headers = join("\n", $headers);
}
else
{
$headers = $headers[0];
}
}
$headers = chop($headers);
$headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers);
$header_array = explode("\r\n", $headers);
@reset($header_array);
$headers = '';
$cc = $bcc = '';
while(list(, $header) = each($header_array))
{
if (preg_match('#^cc:#si', $header))
{
$cc = preg_replace('#^cc:(.*)#si', '\1', $header);
}
else if (preg_match('#^bcc:#si', $header))
{
$bcc = preg_replace('#^bcc:(.*)#si', '\1', $header);
$header = '';
}
$headers .= ($header != '') ? $header . "\r\n" : '';
}
$headers = chop($headers);
$cc = explode(', ', $cc);
$bcc = explode(', ', $bcc);
}
if (trim($subject) == '')
{
echo 'No email Subject specified<br />';
}
if (trim($message) == '')
{
echo 'Email message was blank<br />';
}
if( !$socket = @fsockopen($smtp_host, 25, $errno, $errstr, 20) )
{
echo "Could not connect to smtp host : $errno : $errstr<br />";
}
server_parse($socket, "220", __LINE__);
if( !empty($smtp_username) && !empty($smtp_password) )
{
fputs($socket, "HELO " . $smtp_host . "\r\n");
server_parse($socket, "250", __LINE__);
fputs($socket, "AUTH LOGIN\r\n");
server_parse($socket, "334", __LINE__);
fputs($socket, base64_encode($smtp_username) . "\r\n");
server_parse($socket, "334", __LINE__);
fputs($socket, base64_encode($smtp_password) . "\r\n");
server_parse($socket, "235", __LINE__);
}
else
{
fputs($socket, "EHLO " . $smtp_host . "\r\n");
server_parse($socket, "250", __LINE__);
}
fputs($socket, "MAIL FROM: <" . $absender . ">\r\n");
server_parse($socket, "250", __LINE__);
$to_header = '';
$mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
{
fputs($socket, "RCPT TO: <$mail_to>\r\n");
server_parse($socket, "250", __LINE__);
}
@reset($bcc);
if (isset($bcc))
{
while(list(, $bcc_address) = each($bcc))
{
$bcc_address = trim($bcc_address);
if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address))
{
fputs($socket, "RCPT TO: <$bcc_address>\r\n");
server_parse($socket, "250", __LINE__);
}
}
}
@reset($cc);
if (isset($cc))
{
while(list(, $cc_address) = each($cc))
{
$cc_address = trim($cc_address);
if (preg_match('#[^ ]+\@[^ ]+#', $cc_address))
{
fputs($socket, "RCPT TO: <$cc_address>\r\n");
server_parse($socket, "250", __LINE__);
}
}
}
fputs($socket, "DATA\r\n");
server_parse($socket, "354", __LINE__);
fputs($socket, "Subject: $subject\r\n");
fputs($socket, "From: $smtp_user <$smtp_username>\r\n");
fputs($socket, "To: $mail_to\r\n");
fputs($socket, "$headers\r\n\r\n");
fputs($socket, "$message\r\n");
fputs($socket, ".\r\n");
server_parse($socket, "250", __LINE__);
fputs($socket, "QUIT\r\n");
fclose($socket);
return true;
}
?> -
ps: die smileys die er mir jetzt in den code eingefügt hat sind natürlich entsprechend zu ersetzten, ich hab nur keine ahnung wie man hier anständig code postet, ich hätts ja auch gern über anhang oder so gemacht (des platzes wegen), aber wie gesagt, ich weiß net wie.
und:
jacr schrieb:
luzerne-sprossenzucht schrieb:
$server = '{pop.gmx.de/pop3:110}INBOX';
Versuch mal: $server = '{pop.gmx.de:110/pop3}INBOX';
Wobei du pop3 glaube ich garnicht angeben brauchst.
ne des geht nicht, hab ich schon getestet - es geht nur
$server = '{pop.gmx.de/pop3:110}INBOX';
aber danke. -
Also bei mir funktioniert das so : $server='pop.gmx.net:110/pop3'
oder besser :
$mailbox = imap_open("{".$server."}INBOX", $ktname, $paswd);
Beitrag geaendert: 28.4.2007 12:36:35 von ef06 -
ja, hatte ich zuerst auch so, hat mir ne fehlermeldung gebracht, dann hab ich mal gegoogelt und die andere (von mir beschrieben) variante gefunden, die hat gefunzt.
Weiß jemand den Unterschied?
Beitrag geaendert: 28.4.2007 12:44:30 von luzerne-sprossenzucht -
ob es manchmal an Lc liegt?
Hatte heute schon ein "korioses" Erlebnis, wo etwas nicht wollte wie es eigentlich sollte oder auch müste! -
Kleiner Tip:
Hier wurde extra eine Formatierung für Code eingefügt.
Wenn du die benutzt, dann wird auch kein Smiley mehr angezeigt.
Diese Option ist schon sehr praktisch und befindet sich, wenn du einen Beitrag schreibst auf der rechten Seite unter den Smileys ;) -
ja, hatte ich zuerst auch so, hat mir ne fehlermeldung gebracht, dann hab ich mal gegoogelt und die andere (von mir beschrieben) variante gefunden, die hat gefunzt.
Weiß jemand den Unterschied?
Beitrag geaendert: 28.4.2007 12:44:30 von luzerne-sprossenzucht
wenn du imap nutzen willst musst du einen kostenpflichtigen GMX Zugang haben, der ist beim kostenlosen nciht dabei. -
ja, hatte ich zuerst auch so, hat mir ne fehlermeldung gebracht, dann hab ich mal gegoogelt und die andere (von mir beschrieben) variante gefunden, die hat gefunzt.
Weiß jemand den Unterschied?
Beitrag geaendert: 28.4.2007 12:44:30 von luzerne-sprossenzucht
wenn du imap nutzen willst musst du einen kostenpflichtigen GMX Zugang haben, der ist beim kostenlosen nciht dabei.
Dem kann ich nicht zustimmen zumindest praktiziere ich dies schon seit Jahren und habe einen "Umsonst" Account! -
ja, hatte ich zuerst auch so, hat mir ne fehlermeldung gebracht, dann hab ich mal gegoogelt und die andere (von mir beschrieben) variante gefunden, die hat gefunzt.
Weiß jemand den Unterschied?
Beitrag geaendert: 28.4.2007 12:44:30 von luzerne-sprossenzucht
wenn du imap nutzen willst musst du einen kostenpflichtigen GMX Zugang haben, der ist beim kostenlosen nciht dabei.
Dem kann ich nicht zustimmen zumindest praktiziere ich dies schon seit Jahren und habe einen "Umsonst" Account!
das ist seltsam, denn ich kann zB. meinen Thunderbird nciht auf imap einstellen, aus besagtem Grund, dann müsste ja eigentlich auch ein PHP script scheitern, oder?
-
danke karpfen, jetzt seh ichs.
ich hatte mir mit imap ein php-script geschrieben zum emails abholen und anzeigen - bei gmx mit kostenlosem account keine problem (keine ahnung was thunderbird macht, ich weiß nur, das rechts viele thunderbird mit kostenlosem gmx-account nutzen). bei mir auf localhost war das auch kein problem - nur als ichs dann auf lima nutzen wollte, hab ich gemerkt, das des hier net unterstützt wird.
also an gmx liegt des nicht, sondern am server und des is bei lima halt nicht aktiviert oder was auch immer (steht aber auch irgendwo schon in nem forumbeitrag).
Aber man müsste des ja genauso über socket machen können, wie mails über smtp schreiben (siehe mein letzter code), oder nicht? -
Aber man müsste des ja genauso über socket machen können, wie mails über smtp schreiben (siehe mein letzter code), oder nicht?
geht soweit ich feststellen muste bei Lc alles nicht! -
doch über socket funzt des perfekt...
-
doch über socket funzt des perfekt...
meinste nen Code (ähnlich diesem) :
<? $pop = fsockopen("pop.gmx.de","110"); //Verbindung zum Server aufbauen fputs($pop3, command("USER username\r\n")); //POP-Kommandos an den server senden echo fgets($pop3, 1024); //Ausgeben der Antwort des Servers ?>
Habe da nen Mailoffice was überall läuft nur bei Lc nicht (;-(
Da das script 100% funktioniert versuche ich die richtigkeit nicht in Frage zu stellen!
Also muß ich davon ausgehen, dass es bei Lc nicht geht -
naja, also zumindest das smtp-zeugs funktioniert... ich kann mails darüber schicken (mit der funktion die ich gepostet hatte -> smtpmail() )
mit pop3 - also mails abholen - hab ichs noch nicht probiert (bin da noch am rumbasteln - ps: hey, willst du mir mal den code geben den du zum abrufen verwendest? weil bei mir hat der dauernd irgendwelche probleme und ich peil net warum, wär nett) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage