Hi friends
Is it posssible to create an email account in the cpanel without manualy logging in ? I want to create a php script which logs into the cpanel and create an email account . I hope i would get a solution form u guys

Thanks

Hi friends
Is it posssible to create an email account in the cpanel without manualy logging in ? I want to create a php script which logs into the cpanel and create an email account . I hope i would get a solution form u guys

Thanks

you cannot do it, nor cpanel would allow do it even if u create a script.

coz it is a security factor.

Basically, it's possible, but not easy.

1) You have to do some reverse engineering of CPanel (which normally is forbidden by the licence agreement), to find out how/where CPanel stores the email accounts in its database.

2) You need to do exactly what CPanel does, such as adding the email account to the mailer deamon's user database and (maybe) restart the deamon or rebuild the database, using a console command.

I don't think you'd be able to use the internal CPanel functions from an outside script. Either the code is crypted or you need a valid session to use the functions.

The other way you could do it is as difficult as the first one. You could emulate a browser, open a session and add the email account. But this requires a lot of knowledge about session cookies and the http protocol (how to build the headers).
If CPanel uses (forces) https (secure) connections, simply forget the second solution!

Hi friends
Is it posssible to create an email account in the cpanel without manualy logging in ? I want to create a php script which logs into the cpanel and create an email account . I hope i would get a solution form u guys

Thanks

Hi vssp;

Fortunately CPanel does not use sessions, as Rotak mentioned. Therefore constructing the right HTTP request is not difficult.

If you try a http request to the Cpanel url, you will notice that you receive a 401 response header. This is good news since it means Cpanel uses HTTP Basic Authentication (Digest Auth also sends the same header, but since its not supported on all browsers, I guess cpanel opts for Basic Auth). This is easy to make a http request for in php.

With Basic Authentication username and password is passed as plain text . With php you can use the syntax similar to logging into ftp.

http://user:password@domain.com:port

with any of the stream functions, such as fopen, file_get_contents, fsockopen, file etc.

Example:

$fp = fopen('http://user:password@domain.com:port', 'r');

For creating an email account on Cpanel, the url is of the structure:

http://[example.com]:[2082]/frontend/[x]/mail/doaddpop.html?email=[test]&domain=[example.com]&password=[test]&quota=[10]

The chars in brackets [] are dependant on yoru Cpanel setup or the email account.

Heres an example script:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Add Cpanel Email Accounts</title>
</head>

<body>

<fieldset>
<legend>Add a Cpanel Email Account</legend>
<form name="add_cpemail">
<fieldset>
<legend>Username</legend>
<input type="text" name="username" class="form_text" />
</fieldset>
<fieldset>
<legend>Password</legend>
<input type="password" name="password1" class="form_text" />
</fieldset>
<fieldset>
<legend>Re-type your Password</legend>
<input type="password" name="password2" class="form_text" />
</fieldset>
<fieldset>
<input type="submit" name="send" class="form_button" value="Create Email Account" />
</fieldset>
</form>
</fieldset>
<div style="text-align:center;color:#c0c0c0;">&copy; <a href="http://www.fijiwebdesign.com/">Fiji Web Design</a>&trade;</div>

<script type="text/javascript">
<!--

// form validation
function init() {
	var f = document.forms.add_cpemail;
	var e = f.elements;
	f.onsubmit = function() {
		// check username
		if (!e.username.value || e.username.value == '') {
			alert('Enter a username.');
			return false;
		}
		// check password
		if (e.password1.value != e.password2.value) {
			alert('Please verify that your password and password confirmation match.');
			return false;
		}
	}
}

window.onload = init();

//-->
</script>

<?php

// required cpanel data
define( 'CPEMAIL_DOMAIN', 'example.com'); // Cpanel domain
define( 'CPEMAIL_SSL', 0); // 0 = no SSL, 1 = Uses SSL
define( 'CPEMAIL_PORT', 2082); // usually the port is 2082 withought SSL and 2083 with SSL
define( 'CPEMAIL_THEME', 'bluelagoon'); // x is the default theme, others include: bluelagoon, x2, xmail, xcontroller, monsoon
define( 'CPEMAIL_QUOTA', 10); // email quota in Megabytes

// sensitive cpanel info
define( 'CPEMAIL_USER', 'username'); // Cpanel Username
define( 'CPEMAIL_PASS', 'password'); // Cpanel Password

if (isset($_GET['send'])) {

	$username = $_GET['username'];
	$password = $_GET['password1'];
	
	$url = 'http'.(CPEMAIL_SSL ? 's' : '').'://'.CPEMAIL_USER.':'.CPEMAIL_PASS.'@'.CPEMAIL_DOMAIN.':'.CPEMAIL_PORT.'/frontend/'.CPEMAIL_THEME.'/mail/doaddpop.html';
	$url .= '?email='.$username.'&domain='.CPEMAIL_DOMAIN.'&password='.$password.'&quota='.CPEMAIL_QUOTA;
	
	// make the http request to cpanel, this is where the email is created
	// this is just like the browser making the request, only php does it for the user
	$txt = http_request( $url );
	
	// in a live situation, you would parse the returned html, and see if the email was successfully created.
	// because this is dependent on the Cpanel theme, I didnt put it in. 
	// A simple test example would be:
	// if (strpos($txt, 'Successful') !== false) { echo 'Your account was created, please log in.'; } 
	// the above checks for the occurance of Successful in the returned html, which occurs when an email is created (english)
	// note: different Cpanel themes give different html output, and may be in English or other language
	echo '<hr />';
	echo $txt; // show the result of the http request

}

// makes an fopen request to the url and returns the content
function http_request($url) {
	ini_set('user_agent','MSIE 4\.0b2;'); // set user agent as IE browser
	
	$txt = '';
	if ($fp = fopen($url, 'r')) {
		while( !feof($fp) ) {
			$txt .= fread( $fp, 2082 );
		}
		fclose($fp);
	}
	return $txt;
	
}

?>


</body>
</html>

Sorry, you need to change the values for the defined vars to match your cpanel setup. You can get these values by logging into cpanel, and creating an email account then, looking at the url.

Heres what you need to change:

// required cpanel data
define( 'CPEMAIL_DOMAIN', 'example.com'); // Cpanel domain
define( 'CPEMAIL_SSL', 0); // 0 = no SSL, 1 = Uses SSL
define( 'CPEMAIL_PORT', 2082); // usually the port is 2082 withought SSL and 2083 with SSL
define( 'CPEMAIL_THEME', 'bluelagoon'); // x is the default theme, others include: bluelagoon, x2, xmail, xcontroller, monsoon
define( 'CPEMAIL_QUOTA', 10); // email quota in Megabytes

// sensitive cpanel info
define( 'CPEMAIL_USER', 'username'); // Cpanel Username
define( 'CPEMAIL_PASS', 'password'); // Cpanel Password

Another method of logging into sites and doing stuff is to use JavaScript. With xmlHTTPRequest, you can also specify HTTP headers, and thus reply to a Basic Auth header with the username and password.

Problem with this is the same domain policy, but I've seen workaround for this on the web.

But since this is a php forum, I wont post any solutiosn here.


Fortunately CPanel does not use sessions, as Rotak mentioned. Therefore constructing the right HTTP request is not difficult.

Ooooops... Sorry, I think I mixed CPanel and Plesk. :-| :rolleyes: :o

If CPanel uses (forces) https (secure) connections, simply forget the second solution!

I forgot to mention. If cpanel forces https, the method I just posted will most likely not work.

You'd have to use some php libs that understand the SSL protocol, like CURL. An alternative is using the Sockets function in PHP, but you'd have to be ready to write a huge lib and know SSL and HTTP well. (I dont think I've seen a SSL lib for php).

Another method of logging into sites and doing stuff is to use JavaScript. With xmlHTTPRequest, you can also specify HTTP headers, and thus reply to a Basic Auth header with the username and password.

I found this great resource: http://www.peej.co.uk/articles/http-auth-with-html-forms.html

Make a list of the email accounts you want to create in a file. One email account per line and use the following one liner in your server after ssh.

for i in cat emaillist; do /scripts/addpop $i mkpasswd

Note:
emaillist is the file having list of all the email accounts.
Make sure that your server mkpassword installed in it. If not, install it using the command:

yum install expect

Sample:

(root)>for i in cat emaillist; do /scripts/addpop $i mkpasswd; done
<br />
Created test@domain.com with password qA94]fejA with a quota of unlimited for user testuser
<br />
Created test2@domain.com with password yxK08Gdv= with a quota of unlimited for user testuser

This article has been dead for over six months. Start a new discussion instead.