Jump to content
Froxlor Forum
  • 0

Suche Script zum erzeugen von Email-Adressen.


Jens Harms

Question

Hi,

kann mir jemand sagen wie Froxlor eine Email-Adresse anlegt? (SQL,configs, directories)

Ich möchte ein script schreiben mit dem ich anhand einer CSV-Datei mit Email-adressen und Passwörtern (plain-text) neue Email-Adressen anlegen kann.

Zudem möchte ich später noch maildir Verzeichnisse von qmail/couriermail importieren.

Gruß, Jens

 

 

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

grundlegend ist das anlegen von mailkonten nicht mehr als ein paar datenbank-einträge - wenn du konform sein willst (resourcen zählen etc.) dann schau doch einfach mal in customer_email.php was beim Anlegen passiert.

Mit der aktuellen Entwickler-Version (git-master, 0.10.0) gäbe es eine API die du dafür ansprechen könntest - ich rate allerdings von einem produktiven Einsatz von 0.10.0 derzeit noch ab

Link to comment
Share on other sites

Vielen dank d00p für die schnelle Antwort, ich habe mich im source etwas umgeschaut aber leider nicht alles verstanden (unter accounts/add wird ein update auf mail_virtual  gemacht, und ich dachte das ohne einen eintrag in mail_users kein eintrag in mail_virtual vorhanden sein kann).

Jedenfalls habe ich mir folgendes zusammengereimt und hoffe das es korrekt ist:

 

## ACHTUNG: pseudo code ##


## DEFAULTS ##
$uid          = 2000
$gid          = 2000
$homedir      = /var/customers/mail
$postfix      = 'y'
$quota        = 0
$pop3         = 1
$imap         = 1


# Wird eine Mail zu einer vorhandenen Domain hinzugefügt,
# wird das benutzerkonto in mail_users angelegt und für jede
# mail-adresse des benutzers ein eintrag in mail_virtual erzeugt.
# diese funktion erzeugt pro benutzer genau eine email adresse
# 
FUNCTION add_mail( $email_full, $password )
{
	$crypt_password             = sha512_crypt( $password )
	$email_domain               = substr($email_full,strrpos($email_full,"@")+1);
	( $domainid, $customerid )  = select id,customerid from panel_domains where domain=$email_domain
	$maildir      		    = $domain_name/$email_full/Maildir

	$popaccountid = INSERT INTO mail_users (customerid, email, username, password, password_enc, homedir, maildir, uid, gid, domainid, postfix, quota, imap, pop3)
	   VALUES(
		$customerid,
		$email_full,
		$email_full,
		$password,
		$crypt_password,
		$homedir,
		$maildir,
		$uid,
		$gid,
		$domainid
		$postfix,
		$quota,
		$imap,
		$pop3 );

	INSERT INTO mail_virtual ( email , email_full, destination, domainid, customerid, popaccountid, iscatchall )
	    VALUES(
	        $email_full,
		$email_full,
		$email_full,
		$domainid,
		$popaccountid,
		0 );

    UPDATE panel_customers
            SET email_accounts_used=email_accounts_used+1 WHERE customerid = $customerid

 

Link to comment
Share on other sites

1 hour ago, Jens Harms said:

$maildir = $domain_name/$email_full/Maildir

das wäre eher 

$username = substr($email_full, 0, strpos($email_full, '@'));
$maildir = $domain_name/$username/Maildir

aber im grunde ist das egal, denn dovecot und postfix lesen schlichtweg das homedir aus, was in der datenbank steht ;)

 

1 hour ago, Jens Harms said:

( $domainid, $customerid ) = select id,customerid from panel_domains where domain=$email_domain

Du willst zusätzlich auch prüfen, ob die Domain überhaupt für E-Mail aktiviert ist:

select id,customerid from panel_domains where domain=$email_domain and isemaildomain = '1'

Und zum schluss, würde ich aufgrund der customerid noch selektieren, ob der user nicht schon sein kontingent erreicht hat, z.B.:

SELECT email_accounts, email_accounts_used FROM panel_customers WHERE customerid = :id
[...]

if ($email_accounts == -1 || ($email_accounts > 0 && $email_accounts_used < $email_accounts)) {
	[darf anlegen]
} else {
	[kontingent erreicht, darf keine anlegen]
}

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...