Jump to content
Froxlor Forum
  • 0
Jens Harms

Suche Script zum erzeugen von Email-Adressen.

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

 

 

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

 

Share this post


Link to post
Share on other sites
  • 0
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]
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×