eMailaccount via PHP Erstellen.

xSkaschY

Registered User
Hallo,

ich hab schon seit 2 Tagen probiert, und probiert. Jedoch keine lösung gefunden.

Vorhaben:

Confixx Version: Confixx Pro. Version 3

Ich möchte per PHP Script eine eMail-Adresse anlegen und ein POP3Postfach oder eine Weiterleitung erstellen.

Der User trägt auf der Website sein Passwort ein und die OPtion (POP§ oder Weiterleitung)

Nun, ich denke mal Confixx besitzt ein perlscript, welche die email anlegt, habe jedoch nichts dergleichen gefunden.

Mfg Toby
 
Für alle die die das auch suchen =)

PHP:
<?php
$kunde		= "web1";	# User @ Confixx
$reseller	= "res1";	# Reseller @ Confixx
$maxkb		= "102400";	# Max KB fopr the POPAccount
$domain		= "xxxx";	# E-Mail Domain
$root_pass	= "xxxxx";	# Root Password of the Server
?>
<style type="text/css">
body { 
	color: #000000;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	background-color: #CCCCCC;
}
</style>
<body>
<form name="email" method="post" action="<?=$_SERVER['PHP_SELF']; ?>">
	<fieldset><legend>POP3 Account anlegen</legend>
		<table width="100%"  border="0" cellspacing="0" cellpadding="0"><tr>
			<td width="50%">eMail-Adresse</td>
			<td><input name="email" type="text" id="email" />@<?=$domain; ?></td>
		</tr><tr>
			<td colspan="2"><hr size="1" /></td>
		</tr><tr bgcolor="#DDDCDE">
			<td><strong><input type="radio" name="type" value="pop3"> F&uuml;r ein POP3:</strong></td>
			<td>&nbsp;</td>
		</tr><tr bgcolor="#DDDCDE">
			<td>Password:</td>
			<td><input name="password" type="text" id="password" /></td>
		</tr><tr>
			<td colspan="2"><hr size="1" /></td>
		</tr><tr bgcolor="#DDDCDE">
			<td colspan="2"><strong><input type="radio" name="type" value="redirect"> F&uuml;r eine Weiterleitung: </strong></td>
		</tr><tr bgcolor="#DDDCDE">
			<td>Ziel eMail-Adresse</td>
			<td><input name="target" type="text" id="target" /></td>
		</tr><tr>
			<td colspan="2"><hr size="1" /></td>
		</tr><tr>
			<td>Kommentar:</td>
			<td><input name="kommentar" type="text" id="kommentar" /><input type="submit" name="submit" value="Anlegen" /></td>
		</tr></table>
	</fieldset>
</form>
<?php
if (isset($_POST["submit"])) {
	$mySQL = mysql_connect("127.0.0.1","root",$root_pass);
	$mySelectDb = mysql_select_db("confixx");
	$myQuery = mysql_query("SELECT * FROM pop3 ORDER BY number ASC");
	while($data = mysql_fetch_array($myQuery,MYSQL_ASSOC)) {
		$pop3 = str_pad (substr($data['account'],5),1,'0',STR_PAD_LEFT);
		$uid  = $data["uid"];
		$number  = $data["number"];
	}
	$uid		= "0";
	$number		= (int)($number+1);
	$neu		= "1";
	$account	= $kunde."p".($pop3+1);
	$password	= crypt($_POST["password"]);
	$email		= $_POST["email"];
	$kommentar	= $_POST["kommentar"];
	$target 	= $_POST["target"];
	
	print "Buntzername:  ".$account."<br />";
	print "Password: ".$_POST["password"]."<br />";
	print "E-Mailadresse: ".$email."@".$domain."<br />";
	print "Posteingangsserver: mail.".$domain."<br />";
	print "Postausgangsserver: mail.".$domain."<br />";
	print "Kommentar: ".$kommentar."<br />";

#	print "Userid:  ".$uid."<br />";
#	print "Number:  ".$number."<br />";
#	print "maxkb: ".$maxkb."<br />";
#	print "Kunde: ".$kunde."<br />";
#	print "Reseller: ".$reseller."<br />";
#	print "Neu: ".$neu."<br />";
	
	$lastchange = time();
	
	if ($_POST["type"]=="pop3") {
		$source = mysql_query("INSERT INTO `pop3`
								(`account`,`uid`,`longpw`,`kunde`,`anbieter`,`neu`,`number`,`quota`,`maxkb`,`kommentar`,`lastchange`)
								VALUES ('".$account."','".$uid."','".$password."','".$kunde."','".$reseller."','".$neu."','".$number."','1','".$maxkb."','".$kommentar."','".$lastchange."')") or die(mysql_error());
				
		$source = mysql_query("INSERT INTO `email` 
								(`prefix`,`kunde`,`pop3`,`domain`,`anbieter`,`neu`,`lastchange`)
								VALUES ('".$email."','".$kunde."','".$account."','".$domain."','".$reseller."','".$neu."','0')") or die(mysql_error());
								
		$source = mysql_query("UPDATE allgemein SET addpop='1', quota=1");

	} elseif ($_POST["type"]=="redirect") {
		$source = mysql_query("INSERT INTO `email` 
								(`prefix`,`kunde`,`pop3`,`domain`,`anbieter`,`neu`,`lastchange`)
								VALUES ('".$email."','".$kunde."','".$target."','".$domain."','".$reseller."','".$neu."','0')") or die(mysql_error());
		$source = mysql_query("UPDATE allgemein SET aliases='1'");
	}
	mysql_close($mySQL);
}
?>
</body>
 
das funktioniert so?
oder ist das dein script was nicht funzt?


die angabe das rootpasswortes vom server missfällt mir. ich würde auch gerne für einen verein sowas realisieren. aber mit angabe das rootpw?! nee, lieber nicht. kann man nicht einen neuen benutzer anlegen der zugriff auf die confixx-db hat und diesen dann nutzen?

mfg
 
Ersetze

Code:
$mySQL = mysql_connect("127.0.0.1","root",$root_pass);

durch

Code:
$mySQL = mysql_connect("127.0.0.1","confixx",$root_pass);

Und dann anstatt das Password vom Root das Password des Datenbankusers von Confixx eintragen... das Passwort bekommst du aus der confixx_main.conf
 
xSkaschY said:
PHP:
	$email		= $_POST["email"];
[...]
		$source = mysql_query("INSERT INTO `email`			 (`prefix`,`kunde`,`pop3`,`domain`,`anbieter`,`neu`,`lastchange`)
								VALUES ('".$email."','".$kunde."','".$account."','".$domain."','".$reseller."','".$neu."','0')") or die(mysql_error());
Prima: Da gebe ich doch gleich mal in das Email-Feld folgendes (oder schlimmeres) ein:
Code:
"; DELETE FROM email;

Merke:
Verlass Dich nicht auf automatische magick-quotes! Tu es selber!

huschi.
 
Na gut das ist das andere Thema ;)

Netter ist das das ja der Confixx user Root Rechte hat :)

DROP Database mysql,confixx; MUHA ;)
 
Huschi said:
Verlass Dich nicht auf automatische magick-quotes! Tu es selber!
Hihi, da ist eine kleine MySQL-Klasse, die sowas automatisch erledigt doch was nettes... :)
Aber stimmt schon, über SQL-Injections machen sich viel zu wenig Leute Gedanken..
 
Is mir klar das mein Beispiel nicht grad das sichereste ist, es sollte auch nur ein grobes Beispiel sein, wie man soetwas realisiert und nicht noch anschliessend zu erklären was mysql_escape_string() macht...

Mfg Toby
 
Sry fürs Totengraben

Hallo,
ich habe mir das ganze hier mal als Vorbild genommen und für meinen Confixx Server leicht umgeschrieben. Am Anfang ging es auch noch nur leider hab ich warscheinlich was gering geändert und es hinbekommen das der Code jetzt zwar alles erstellt also ich seh per Confixx die angelegten Emails und POP3 Fächer aber alle mit dem tollen Plus da vor.Was ja denke ich so viel heißt wie ja ist in der Db aber noch nicht in z.B sendmail ist sie funken also leider nicht. ^^
Irgenwie fehlt da so was wie ein Update Befehl.
Naja hier ist erst mal der code ist warscheinlich auch noch zimm lich viel Unützes dirn aber es funkt erstmal (also keine errors)er mach nur nicht das was er soll. :D

Code:
<?php
$kunde        = "web0";    # User @ Confixx
$reseller    = "res0";    # Reseller @ Confixx
$maxkb        = "10240";    # Max KB for the POPAccount
$root_pass    = "xxxx";    # Root Password of the Server

if (!empty($_POST['email']) AND !empty($_POST['type']))
{
	$email = $_POST['email']."@xxxx.de";
	if (eregi("[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}$",$email))
	{
		$mySQL = mysql_connect("localhost","xxx",$root_pass);
		$mySelectDb = mysql_select_db("confixx");
		$myQuery = mysql_query("SELECT * FROM pop3 ORDER BY number ASC");
		while($data = mysql_fetch_array($myQuery,MYSQL_ASSOC))
		{
			$pop3 = str_pad (substr($data['account'],5),1,'0',STR_PAD_LEFT);
			$uid  = $data["uid"];
			$number  = $data["number"];
		}
		$uid        = "0";
		$number        = (int)($number+1);
		$neu        = "1";
		$account    = $kunde."p".($pop3+1);
		$password    = crypt($_POST["password"]);
		$email        = mysql_real_escape_string(trim($_POST["email"]));
		$kommentar    = "NIX";
		$target     = mysql_real_escape_string(trim($_POST["target"]));
		$domain        = "xxx.de";    # E-Mail Domain
		$lastchange = time();
		
		
	$sql = "SELECT  
          count(*) AS COUNT  
        FROM  
          email  
        WHERE  
          prefix = '".mysql_real_escape_string(trim($_POST['email']))."'"; 
$erg = mysql_query($sql) or die (mysql_error()); 
$row = mysql_fetch_assoc($erg); 
if($row['count'] > 0) { 
   echo 'Mail schon vergeben!';
}
else
{

	   if ($_POST["type"]=="pop3") {
	   			$mySelectDb = mysql_select_db("rs_mail");
	   				$source = mysql_query("INSERT INTO `accs`
									(`mail`,`pwd`,`user`,`begin`,`last`)
									VALUES ('".$email."','".$password."','".$account."','".$lastchange."','".$lastchange."')") or die(mysql_error());
	   				$mySelectDb = mysql_select_db("confixx");
	   				
		  $source = mysql_query("INSERT INTO `pop3`
                                (`account`,`uid`,`longpw`,`kunde`,`anbieter`,`neu`,`number`,`quota`,`maxkb`,`kommentar`,`lastchange`)
                                VALUES ('".$account."','".$uid."','".$password."','".$kunde."','".$reseller."','".$neu."','".$number."','1','".$maxkb."','".$kommentar."','".$lastchange."')") or die(mysql_error());

			$source = mysql_query("INSERT INTO `email`
									(`prefix`,`kunde`,`domain`,`anbieter`,`neu`,`lastchange`)
									VALUES ('".$email."','".$kunde."','".$domain."','".$reseller."','".$neu."','0')") or die(mysql_error());
		$myQuery = mysql_query("SELECT * FROM email ORDER BY ident ASC");
		while($data = mysql_fetch_array($myQuery,MYSQL_ASSOC)) {
			$ident  = $data["ident"];
		}
					$source = mysql_query("INSERT INTO `email_forward`
									(`email_ident`,`pop3`,`kunde`)
									VALUES ('".$ident."','".$account."','".$kunde."')") or die(mysql_error());
		
		
			$source = mysql_query("UPDATE allgemein SET addpop='1', quota=1");

		} elseif ($_POST["type"]=="redirect") {
			
		     $source = mysql_query("INSERT INTO `email` 
                                (`prefix`,`kunde`,`domain`,`anbieter`,`neu`,`lastchange`)
                                VALUES ('".$email."','".$kunde."','".$domain."','".$reseller."','".$neu."','0')") or die(mysql_error());
    		$myQuery = mysql_query("SELECT * FROM email ORDER BY ident ASC");
     while($data = mysql_fetch_array($myQuery,MYSQL_ASSOC)) {
        $ident  = $data["ident"];
    	}
     $source = mysql_query("INSERT INTO `email_forward` 
                                (`email_ident`,`pop3`,`kunde`)
                                VALUES ('".$ident."','".$target."','".$kunde."')") or die(mysql_error());
        $source = mysql_query("UPDATE allgemein SET aliases='1'");
											}
		echo "Registrierung erfolgreich!";

		mysql_close($mySQL);
}
	}
	else
	{
		echo "Bitte geben sie eine richtige eMail-Adresse an!";
	}
}

else
{
	echo "Bitte geben sie alle benötigten Daten an!";
}
?>
 
Wenn das Script jetzt noch schön formatiert wäre, wäre es sehr schön :)

Mein Info-Lehrer hätte früher zu sowas "Spaghetti Programmierung" gesagt :)

Und vielleicht solltest du sowas:
Code:
$email = $_POST['email']."@xxxx.de";
...
$mySQL = mysql_connect("localhost","xxx",$root_pass);
Aus dem Quellcode rausnehmen und oben in dem Konfigurationsteil setzten lassen...so findet jemand der das Script nur flüchtig anschaut die Sachen net und wundert sich warum es nicht geht.
 
Es Funkt ja nur nicht richtig :(
jop das wird auch noch in was Richtiges eingebettet das ist jetzt nur ein Happen vom Ganzen sozusagen eine Funktion^^
Bei der warscheinlich nur ein kleiner Eintrag fehlt.:(
 
Sorry

Entschuldigung
ich habe schlau wie ich bin dem Db user so viele wie rechte möglich entzogen^^
dabei auch für die Tabelle allgemein wo drine steht was er updaten soll.
 
Was ich allerdings dann nicht verstehe ist:

also ich seh per Confixx die angelegten Emails und POP3 Fächer aber alle mit dem tollen Plus da vor.

Das heißt sie wurden angelegt und zum Update ausgewählt.
Wenn ich was an der Config per Hand ändere,
lasse ich nur den CronJob laufen.
(via confixx_counterscript.pl --force-time -dbg)
Dann werden die Änderungen sofort übernommen.
Kann es sein das du nicht lang genug gewartet hast?
In meiner Version gibt es keine Update Tabelle.
Das wundert mich jetzt schon ein wenig.
Normalerweise reicht es den Wert des Feldes "neu" entsprechend zu setzen und Confixx weiß was es tun muss.
;)
draco
 
Back
Top