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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...





×
×
  • Create New...