diff --git a/maildev/maildev-tests.ts b/maildev/maildev-tests.ts
new file mode 100644
index 000000000..156dbd446
--- /dev/null
+++ b/maildev/maildev-tests.ts
@@ -0,0 +1,12 @@
+///
+
+import MailDev = require("maildev")
+
+var options: MailDevOptions = {smtp: 1025};
+var maildev = new MailDev(options);
+
+var errorCallback = (error: Error) => {};
+maildev.listen(errorCallback);
+
+var eventName = 'new';
+maildev.on(eventName, errorCallback)
diff --git a/maildev/maildev.d.ts b/maildev/maildev.d.ts
index fadd1aceb..9887ddbfd 100644
--- a/maildev/maildev.d.ts
+++ b/maildev/maildev.d.ts
@@ -5,105 +5,132 @@
///
-import fs = require("fs");
-
/**
* Interface for {@link MailDev} options.
*/
interface MailDevOptions {
- /**
- * SMTP host for outgoing emails
- *
- * @type {string}
- */
- outgoingHost: string;
+ /**
+ * SMTP host for outgoing emails
+ *
+ * @type {string}
+ */
+ outgoingHost?: string;
- /**
- * SMTP password for outgoing emails
- *
- * @type {string}
- */
- outgoingPass: string;
+ /**
+ * SMTP password for outgoing emails
+ *
+ * @type {string}
+ */
+ outgoingPass?: string;
- /**
- * SMTP port for outgoing emails.
- *
- * @type {number}
- */
- outgoingPort: number;
+ /**
+ * SMTP port for outgoing emails.
+ *
+ * @type {number}
+ */
+ outgoingPort?: number;
- /**
- * SMTP user for outgoing emails
- *
- * @type {string}
- */
- outgoingUser: string;
+ /**
+ * SMTP user for outgoing emails
+ *
+ * @type {string}
+ */
+ outgoingUser?: string;
- /**
- * SMTP port to catch emails.
- *
- * @type {number}
- */
- smtp: number;
+ /**
+ * SMTP port to catch emails.
+ *
+ * @type {number}
+ */
+ smtp?: number;
}
/**
- * Interface for {@link MailDev}.
+ * Interface for mail.
*/
-interface MailDev {
+interface Mail {
/**
- * Constructor.
- *
- * @public
- * @param options The options.
+ * Identifier.
*/
- new(options: MailDevOptions): MailDev;
+ id?: string;
/**
- * Stops the SMTP server.
- *
- * @public
- * @param callback The error callback.
+ * Client.
*/
- end(callback?: (error: Error) => void): void;
-
- /**
- * Accepts e-mail identifier, returns email object.
- *
- * @public
- * @param id The e-mail identifier.
- */
- getEmail(id: string, callback?: (error: Error) => void): void;
-
- /**
- * Returns a readable stream of the raw e-mail.
- *
- * @public
- * @param id The e-mail identifier.
- */
- getRawEmail(id: string, callback?: (error: Error, readStream: fs.ReadStream) => void): void;
-
- /**
- * Returns array of all e-mail.
-
- * @public
- */
- getAllEmail(): void;
-
- /**
- * Starts the SMTP server.
- *
- * @public
- * @param callback The error callback.
- */
- listen(callback?: (error: Error) => void): void;
-
- /**
- * Event called when a new e-mail is received. Callback receives single mail object.
- *
- * @public
- * @param eventName The event name.
- * @param callback The callback for obtains the received email.
- */
- on(eventName: string, callback: (email: string) => void): void;
+ envelope?: Object;
+}
+
+declare module "maildev" {
+ import fs = require("fs");
+
+ /**
+ * Interface for {@link MailDev}.
+ */
+ class MailDev {
+ /**
+ * Constructor.
+ *
+ * @public
+ * @param {MailDevOptions} options The options.
+ */
+ constructor(options: MailDevOptions);
+
+ /**
+ * Stops the SMTP server.
+ *
+ * @public
+ * @param callback The error callback.
+ */
+ end(callback?: (error: Error) => void): void;
+
+ /**
+ * Accepts e-mail identifier, returns email object.
+ *
+ * @public
+ * @param {string} id The e-mail identifier.
+ */
+ getEmail(id: string, callback?: (error: Error) => void): void;
+
+ /**
+ * Returns a readable stream of the raw e-mail.
+ *
+ * @public
+ * @param {string} id The e-mail identifier.
+ */
+ getRawEmail(id: string, callback?: (error: Error, readStream: fs.ReadStream) => void): void;
+
+ /**
+ * Returns array of all e-mail.
+
+ * @public
+ */
+ getAllEmail(done: (error: Error, emails: Array