eleith / emailjs Goto Github PK
View Code? Open in Web Editor NEWhtml emails and attachments to any smtp server with nodejs
License: MIT License
html emails and attachments to any smtp server with nodejs
License: MIT License
$ npm install emailjs
npm http GET https://registry.npmjs.org/emailjs
npm http 304 https://registry.npmjs.org/emailjs
npm http GET https://registry.npmjs.org/buffertools
npm http 304 https://registry.npmjs.org/buffertools
[email protected] preinstall /home/me/kj/src/node_modules/emailjs/node_modules/buffertools
./build-wrapper
Traceback (most recent call last):
File "./build-wrapper", line 8, in
status = subprocess.call('node-waf configure build'.split())
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(_popenargs, *_kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in init
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1239, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
npm ERR! error installing [email protected]
npm ERR! error installing [email protected]
npm ERR! [email protected] preinstall: ./build-wrapper
npm ERR! sh "-c" "./build-wrapper"
failed with 1
npm ERR!
npm ERR! Failed at the [email protected] preinstall script.
npm ERR! This is most likely a problem with the buffertools package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! ./build-wrapper
npm ERR! You can get their info via:
npm ERR! npm owner ls buffertools
npm ERR! There is likely additional logging output above.
npm ERR!
npm ERR! System Linux 3.0.0-14-virtual
npm ERR! command "node" "/usr/local/bin/npm" "install" "emailjs"
npm ERR! cwd /home/me/kj/src/node_modules
npm ERR! node -v v0.7.0-pre
npm ERR! npm -v 1.1.0-beta-10
npm ERR! code ELIFECYCLE
npm ERR! message [email protected] preinstall: ./build-wrapper
npm ERR! message sh "-c" "./build-wrapper"
failed with 1
I'm getting 354 responses when using emailjs against the following dummy STMP server. I am planning on using emailjs for a mail utility in place of node-mail
since that isn't being maintained much and has some outstanding issues. However, I never encountered this error with that module but do with this one. Any ideas?
Here's where you download the dummy STMP server:
http://www.aboutmyip.com/AboutMyXApp/DevNullSmtp.jsp
I usually run:
java -jar DevNullSmtp.jar -p 2500 -console
// and then run emailjs against port 2500
Here's the error I keep getting:
{ code: 2,
message: 'bad response on command \'rset\'',
smtp: '354 Start mail input; end with <CRLF>.<CRLF>\n' }
I can get you more details if you need.
I have use case where I don't want to send a file. Instead I want to send directly a binary stream as attachment.
emailjs can't send messages larger than 12kb because it allocates a fixed buffer of that size which cannot be changed.
If you try to increase the buffer size, the process will crash with a stack overflow error because 'output_base64()' recurses for every 76 bytes. Seriously? If there wasn't a 12kb limitation, that would be a huge security risk.
eleith, I really appreciate all the hard work you've done making emailjs, but I urge you to consider deprecating this project in favor of nodemailer which doesn't have these problems. I didn't know about nodemailer until now because your project was the first thing that showed up for me when I googled for a node email library. I feel very concerned for the people using this library in production who didn't test it as thoroughly as I have.
The company i work for receives reports about mails not being visible.
Let me explain what we found out so far. The setup is the usual sign-up procedure at a server and an e-mail sent to verify the existence of the e-mail address. So far so good. Everything works as expected as far as we can see. Node.js is used for serverside programming with emailjs for sending the mentioned e-mail.
A few of our users complain about the e-mails being completely empty. Neither the main ascii variant nor the html alternative is visible for these users. We haven't been able to reproduce the issue yet, so details are vague. We do know one user with the issue has a slightly older android version and uses this to read e-mail.
Any suggestion is appreciated. If we can work with a developer of emailjs that would be fantastic.
Michiel
Working perfectly on my local machine but when I deploy to server I get this error:
Error: /app/node_modules/emailjs/node_modules/buffertools/build/Release/buffertools.node: invalid ELF header
Is this a bug or something I'm doing?
0.5.x (well, checked 0.5.5 docs) has a new way to do starttls.
The docs include a workable example: http://gist.github.com/848444
Not sure it's bug of emailjs or node-imap but when I requre it ImapConnection.connect()
fails with strange exception.
var imap = require('imap');
var email = require('emailjs');
var imapConnection = new imap.ImapConnection({
username: "[email protected]",
password: "...",
host: "imap.gmail.com",
port: 993,
secure: true
});
imapConnection.connect(function (){
console.log('logged in');
imapConnection.logout(function (){
console.log('logged out');
});
});
throws
/home/suor/projects/remailer/node_modules/imap/imap.js:1635
while ((pos = this.indexOf(search, start)) > -1) {
^
TypeError: Second argument must be a string or a buffer.
at Buffer.split (/home/suor/projects/remailer/node_modules/imap/imap.js:1635:22)
at CleartextStream.<anonymous> (/home/suor/projects/remailer/node_modules/imap/imap.js:241:17)
at CleartextStream.emit (events.js:67:17)
at CleartextStream._push (tls.js:363:12)
at SecurePair.cycle (tls.js:688:20)
at EncryptedStream.write (tls.js:122:13)
at Socket.ondata (stream.js:38:26)
at Socket.emit (events.js:67:17)
at TCP.onread (net.js:347:14)
Commenting out require('emailjs')
makes everything work
As seen in bnoordhuis/node-buffertools#19, depending on buffertools will cause this package to fail to install on Windows. You seem to only use it for buffertools.concat
. Is there a way to do the same thing without that function?
I am using v0.2.2 of emailjs and getting back the following error after performing a send. Not sure what the error itself is, but I do know that it doesn't have a stacktrace which makes it hard to track down in the code. This probly indicates that the error itself is not an error object. When possible, all errors should be of the Error object or derive from it so you can get stacktraces :)
Any thoughts on what causes this or where it comes from in the codebase?
{ code: 2,
message: 'bad response on command \'rset\'',
smtp: '354 Continue\n' }
I'm trying to add an image to an email more details here:
http://stackoverflow.com/a/11124934/593425
For that I need to define a Base64 attachment and point to it.
I'm running into a problem where a send() call fails with the below error. After the failure, all future send() calls fail silently.
I've experimented with recreating the connection with emailjs.server.connect() but that doesn't seem to resolve it either.
What pattern do most people use? Since, I don't see a disconnection(), I've created a single connection and send all messages through that connection.
{ [Error: connection encountered an error]
code: 5,
previous: { [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' },
smtp: undefined }
After some time in operation, emailjs gets stuck with an open smtp connection in state 2 (CONNECTED) and sending=true, but the connection is not writable.
Here's a trace of global objects:
queue: Array -- has 18 messages in queue..
sending: true
smtp: Object
_secure: true
_state: 2
domain: Ubuntu-1104-natty-32-minimal
features: Object
8bitmime: true
auth: LOGIN PLAIN XOAUTH
enhancedstatuscodes: true
mx.google.com: at your service, [78.47.27.204]
size: 35882577
proto: Object
host: smtp.gmail.com
loggedin: true
port: 465
sock: Object
_controlReleased: true
_destroyAfterPush: true
_doneFlag: true
_events: Object
_paused: false
_pending: Array
_pendingBytes: 0
_pendingCallbacks: Array
authorized: true
encrypted: Object
pair: Object
_clearWriteState: true
_doneFlag: true
_encWriteState: true
_events: Object
_isServer: false
_rejectUnauthorized: false
_requestCert: true
_secureEstablished: true
_writeCalled: false
cleartext: Object
credentials: Object
cycleCleartextPullLock: false
cycleCleartextPushLock: false
cycleEncryptedPullLock: false
cycleEncryptedPushLock: false
encrypted: Object
fd: null
ssl: null
proto: Object
readable: false
socket: Object
_connecting: false
_events: Object
_idleNext: null
_idlePrev: null
_idleStart: Date
_idleTimeout: 5000
_pipeCount: 1
_readImpl: function (buf, off, len) { return read(self.fd, buf, off, len); }
_readWatcher: null
_shutdownImpl: function () { shutdown(self.fd, 'write'); }
_writeImpl: function (buf, off, len, fd, flags) { // XXX: TLS support requires that 0-byte writes get procโฆ
_writeQueue: Array
_writeQueueCallbacks: Array
_writeQueueEncoding: Array
_writeQueueFD: Array
_writeWatcher: null
allowHalfOpen: false
bufferSize: 0
destroyed: true
fd: null
readable: false
type: tcp4
writable: false
proto: Object
writable: false
proto: Object
ssl: true
timeout: 5000
tls: false
proto: Object
As you can see, the socket is long gone, but smtp has no idea about this, and still tries to send data to the socket.
the "sending" flag is never changed to 0, as well as the smtpp.state which stays CONNECTED.
Please let know how to fix this, as this problem has been popping up frequently ever since deployment.
Runs flawlessly on local app, but not on remote server. I even wrote up a small test app to solely focus on the emailjs. Again, works fine locally, but I don't receive emails whenever its ran on the remote server. Successful callbacks are given in both cases.
var email = require('emailjs');
// use your own account, I'm using smtp.com
var server = email.server.connect(
{
user: "...",
password: "...",
host: "...",
port: 25025,
domain: "..."
}
);
// simulate an error
server.send(
{
text: "test",
from: "...",
to: Object, // the error
subject: "test"
}, function(error, message) {
console.log("done emailing " + JSON.stringify(error));
}
);
// done emailing {"code":2,"message":"bad response on command 'RCPT'","smtp":"504 5.5.2 : Recipient address rejected: need fully-qualified address\n","error":null}
// now let's make a valid call
server.send(
{
text: "test",
from: "...",
to: "...",
subject: "test"
}, function(error, message) {
console.log("done emailing " + JSON.stringify(error));
}
);
// but it never calls the callback
server.smtp.state();
// 2
server.queue.length;
// 1
server._poll();
// doesn't help
Hi!
Sometimes does not send messages with error:
{ [Error: connection has ended] code: 9, smtp: undefined }
Sometimes the messages are sent correctly with the same settings. How can I avoid this error?
I'm trying to use emailjs
with haraka
, but I'm getting this error while I try to test it:
{ [Error: no form of authorization supported] code: 7, smtp: undefined }
Here is the code:
var email = use("/usr/local/lib/node_modules/emailjs");
var mail = email.server.connect({
user : "[email protected]",
password : "my_password",
host : "localhost",
domain : 'localhost',
ssl : false,
port : 587,
});
// send message
mail.send({
text: "i hope this works",
from: "ME! <[email protected]>",
to: "Adam <[email protected]>",
subject: "testing emailjs"
}, function(err, message) {
console.log(err || message);
});
The latest 2.0.0 bufferjs no longer has bufferjs/concat.js causing emailjs to fail to load. One solution is to force the bufferjs dependency to "=1.1.0" vs "*".
Hello,
There is a minor problem in message.js when calculation the number of chunks , the number is currently
a float rather than an integer.The last overleft line may be sent twice, and this causes a problem on some
mail server.
The correction is obvious
var loops = Math.floor(info.length / mimechunk);
Cheers
JF
What happens with events that are coming in when there is no message in flight ?
It seems like the events are ignored as there is no listener to the 'response' events after all the send()'s are done.
Hi,
I was trying to use emailjs with outlook smtp but unable to use. I am writing my options object something like this:
var server = email.server.connect({
user: "my-use-mail-id",
password:"my-passwrod",
host: "smtp.outlook.com",
port: xyz,
ssl: true
});
when I do the same with gmail smtp, looks working great!! please give me a working example with outlook SMTP .
Thanks
-Manish
If I use a certain host for the options object that I pass into emailjs.server.connect, it crashes.
For example, I have this code:
http://vpaste.net/lIbf3
That code works, but if I change the host on line 8 from gaia.ecs.csus.edu
to smtp.saclink.csus.edu
, the whole things crashes with the following output:
http://vpaste.net/XwnMZ
Changing the host name is the only change I'm making to cause the error.
whenever I am trying to send attachment greater than 2mb node.js server get crashed,
how to fix this issue.
Fresh install of 0.8.4 and emailjs 0.3.1 gives me a ECONNREFUSED when I enable SSL for sending mail on port 465.
No problems sending when switched over to ssl:false and on a non-ssl port.
The same code (ssl:true, port:465) works fine on older versions of node and emailjs.
Any ideas what I'm doing wrong?
Thanks,
Shawn
e=require('emailjs')
s=e.server.connect()
s.send(e.message.create({to:'root',from:'vlad',text:test'}),function(e,m){console.log(e,m)});
undefined
{ [Error: bad response on command 'RCPT']
code: 2,
smtp: '550 5.1.1 : Recipient address rejected: User unknown in local recipient table\n' } { attachments: [],
alternative: null,
header:
{ 'message-id': '1349894146526.2.32016@backend',
to: 'root',
from: 'vlad' },
content: 'text/plain; charset=utf-8',
text: 'test' }
emailjs is a great and easy to use! Exactly what I need.
But now I have a Problem:
I wanted to embed some images into an HTML-email. You can do this by defining a src
with a content-id like this:
<img src="cid:uniqueidentifier"` width="100" height ="50">
Additionaly you have to add this identifier in the header of the image.
------=_NextPart_000_000E_01C5BEB4.946C1870
Content-Type: image/png;
name="header.png"
Content-Transfer-Encoding: base64
Content-ID: <uniqueidentifier>
/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAQwAA/+4AJkFkb2JlAGTAAAAAAQMA
FQQDBgoNAAAVAAAAIvoAADfBAABPTP/bAIQABQMDAwMDBQMDBQcEBAQHCAYFBQYICQcHCAcHCQsJ
CgoKCgkLCwwMDAwMCw4ODg4ODhQUFBQUFhYWFhYWFhYWFgEFBQUJCAkRCwsRFA8ODxQWFhYWFhYW...
I can't find a way to realize this with emailjs. Do you plan to implement such functionality?
The email is sent but header does not reflect what was in the "from" field. For example: if I login account "mygmail" of smtp.gmail.com and change from as "[email protected]", it doesn't work. The header of the email sent still shows "[email protected]" as the From.
We will need:
For my case, I will need Reply-To so that people can reply to different address.
Hello!
Does emailjs support sendmail style send requests from a linux box? It would be nice to be able to use this as an abstraction (i.e. make the mail implementation transparent).
Apologies if I missed some documentation regarding non-SMTP approaches; I did apply due diligence.
Cheers,
Its great that emailjs supports inline images:
#16
..but I'm seeing some strange behaviour: The inline images appear twice in my mail reader (Os X Mail app) Once inline and then again as an attachment.
Tried a different reader (Google Mail) but there the image doesn't appear inline and just shows up as an attachment.
I'm wondering if this is because the attached inline image should be inside the boundary for the HTML content of the message?
Can you add some kind of an external file structure for unsent messages, so if the problem is in configuration,
those messages can be re-sent when server is restarted with new configuration?
Or maybe an external resend_old.js script, which would drain the unsent queue, using the new config.
Main point: avoid silently dropping messages when sending is a problem.
Hi,
emailjs is not compiling on my system because of buffertools. so i looked at your code and found, that you are using buffertools just in one line. i suggest you get rid of this dependency.
Line 346
var buffer2 = buffertools.concat(previous, buffer);
there are errors in buffertools (node-gyp). see issue nodejs/node-gyp#77
Runs fine on my mac, but on our Linux server after sending a bunch of emails successfully (maybe 6-10) i get FATAL ERROR: JS Allocation failed - process out of memory
killing Node. The emails are a couple lines of text and html, each is sent to just one person.
var Server = EmailJs.server.connect({
user: process.env.CATAPULT_EMAIL,
password:process.env.CATAPULT_EMAIL_PASSWORD,
host: 'smtp.gmail.com',
ssl: true
});
function send(options, cb) {
if (!options.to) { log('to required'); return cb();}
if (!options.subject) { log('subject required'); return cb();}
if (!options.text) { log('message required'); return cb();}
if (!process.env.CATAPULT_EMAIL) { log('catapult email required'); return cb();}
if (!process.env.CATAPULT_EMAIL_PASSWORD) { log('catapult password required'); return cb();}
var headers = {
to: options.to,
from: options.from,
subject: options.subject,
text: options.text,
authentication: false
};
var Message = EmailJs.message.create(headers);
if (options.html) {
Message.attach({data: options.html, alternative:true});
}
log('sending email to', options.to);
Server.send(Message,
function(err, result){
if (err){
log('error', err.message || err);
}
//process.exit();
cb(err, result);
});
}
emaijs exposes the Message object allowing it to be used independently to generate MIME formatted messages/attachments.
it would be nice to have an example showcasing this feature and to see if message.js needs to be modified to make this process feasible.
Hey guys.
When I'm deploying my NodeApp at Heroku I get this error.
I've been asking around and other people have the same issue.
(It's working fine locally).
This is the error:
2012-11-02T10:22:17+00:00 heroku[web.1]: Starting process with command node app.js
2012-11-02T10:22:18+00:00 app[web.1]: at Object. (/app/node_modules/emailjs/smtp/message.js:17:4)
2012-11-02T10:22:18+00:00 app[web.1]: at Module._compile (module.js:446:26)
2012-11-02T10:22:18+00:00 app[web.1]: at Object..js (module.js:464:10)
2012-11-02T10:22:18+00:00 app[web.1]: at Module.load (module.js:353:31)
2012-11-02T10:22:18+00:00 app[web.1]: at Function._load (module.js:311:12)
2012-11-02T10:22:18+00:00 app[web.1]: at Module.require (module.js:359:17)
2012-11-02T10:22:18+00:00 app[web.1]: at require (module.js:375:17)
2012-11-02T10:22:18+00:00 app[web.1]: at Module.require (module.js:359:17)
2012-11-02T10:22:18+00:00 app[web.1]: at Function._load (module.js:279:25)
2012-11-02T10:22:18+00:00 app[web.1]: at Function._resolveFilename (module.js:337:11)
2012-11-02T10:22:18+00:00 app[web.1]: ^
2012-11-02T10:22:18+00:00 app[web.1]: Error: Cannot find module 'bufferjs/concat'
2012-11-02T10:22:18+00:00 app[web.1]: throw new Error("Cannot find module '" + request + "'");
2012-11-02T10:22:18+00:00 app[web.1]: module.js:337
2012-11-02T10:22:18+00:00 app[web.1]:
2012-11-02T10:22:19+00:00 heroku[web.1]: Process exited with status 1
2012-11-02T10:22:19+00:00 heroku[web.1]: State changed from starting to crashed
2012-11-02T10:32:25+00:00 heroku[web.1]: State changed from crashed to down
/*
Client does not send QUIT command (although it says so when using debug mode, but it does not appear in network sniffer) unless
The following code works, we need to recreate the connection to server:
email.server.connect({
host: "localhost",
port: 5001,
ssl: false
});
each time to be succesful, thus forcing client sending the QUIT command
*/
email_connect.composeAndSendMail = function( replacements, message_body, callback) {
var email_connect= email.server.connect({
host: "localhost",
port: 5001,
ssl: false
});
var process_email = function(err, email_template) {
if(err) {
return callback(err);
}
_.each(replacements, function(replacement) {
email_template = email_template.replace(replacement.key, replacement.value);
});
message_body.text = email_template;
message_body.attachment = [
{
data: email_template,
alternative: true
}
];
email_connect.send(message_body, function(err, message) {
if(err) {
console.log("Error sending email");
callback(err, null);
}else{
callback(null, message);
}
});
};
};
/*
This code presents the bug after several executions
*/
var email_connect= email.server.connect({
host: "localhost",
port: 5001,
ssl: false
});
email_connect.composeAndSendMail = function( replacements, message_body, callback) {
var process_email = function(err, email_template) {
if(err) {
return callback(err);
}
_.each(replacements, function(replacement) {
email_template = email_template.replace(replacement.key, replacement.value);
});
message_body.text = email_template;
message_body.attachment = [
{
data: email_template,
alternative: true
}
];
email_connect.send(message_body, function(err, message) {
if(err) {
console.log("Error sending email");
callback(err, null);
}else{
callback(null, message);
}
});
};
};
Googled that error, I arrived at this closed npm issue which tells me to nag you to use node-gyp.
I'm new to nodejs so I currently don't understand exactly what these tools are and what these means or whether stuff are out of date and as far as I know I'm currently doing node on windows.
It seems to me the only reason this won't build on Windows is because of the iconv dependency and it appears that after version 2.0.4 of iconv they support Windows. Is there anyway we could update the dependencies or at least the iconv dependency to their latest version of 2.0.6, or is there some other issue with using this on Windows?
New version with error object fixes plz :)
Hello eleith,
Thanks for this module, very easy to use and flexible. I've had one issue pop up: If initial send fails for whatever reason - server is under load, network connection died - it seems that the module automatically attempts to resend the msg, even though error is returned to callee.
In my code, I only log the error and don't re-attempt send. But up a couple of times when such an error occurred, the target email account was sent the msg several times - at one point reaching 83 before I finally killed my server!
Any clues as to what could be happening?
Thanks,
srimonti
From my limited testing, emailjs doesn't do any quoted-printable escaping for mail headers that are non US-ASCII, right?
I'd have code to grab from my utterly complex multi-daemon setup that I'd like to replace with emailjs at http://hg.mozilla.org/users/axel_mozilla.com/outreach/file/9bd340be49fc/node-utils/sendmail.js.
Currently there is 0.1.19 in the npm repository. Maybe you can update? Then it is also consistent with your readme.
By using >= you expose anyone using your package and installing via npm install to different versions of the package being installed. If moment breaks api with a major or minor release then you will never know.
I suggest pinning to the exact version of moment or at least using ~ to indicate that only patches above a certain patch level are allowed.
This is better than >= or even N.N.x. I would recommend exact pinning tho just to be safe ;)
Request for proxy support
in smtp.js, setTimeout is called incorrectly with callback as the first parameter.
Hi there!
When making relatively long html emails (no problem for the text part), on some mail servers, I will receive the email with various base64 encoded chunks separated by newline characters, which basically breaks email rendering. (ie: the client stops rendering the mail after the first chunk)
Some servers seem to "remove" the newline, others leave it there, (for example, gmail removes it, webfaction mail servers are leaving it there), which makes the problem appear only on certain servers.
I have two gists of the exact same email, sent at the same time. The "broken" one ended up in a server that "breaks" the email (webfaction), the other ended up in a server that renders it correctly (gmail).
broken: https://gist.github.com/1391472
correct: https://gist.github.com/1391476
I also tested a bunch of other stuffs such as changing the smtp server or the mail client but that doesn't seem to make any difference. I also directly contacted webfaction, who confirmed that they really received the mail with the newlines, they suspect that gmail removes them automatically to "fix" the mail.
I'm currently actively trying to fix this problem as it's preventing us to go live with a website at this moment, so I'll be more than willing to help fixing it on emailjs if it really comes from there. Any other pointer would be greatly appreciated if it doesn't!
I'm on node 0.6.1
hi :)
first of all, thank for emailjs.
and I used to attach.
sned to mail and received mail.
but attach filename is break.
share problem code :
ATTACH:
{
PATH: './test.html',
TYPE: 'text/html',
NAME: '๋ด์ค.html' //<----- korean letter
}
Thanks for a great plug-in! I tried specifying replyTo in the same way one would the to, cc or from properties but it does not work for me. Could you please give an example of specifying a Reply-To email address?
I'm on an internal server that doesn't require authentication. How to use without username and password? Seems to through an invalid Message object error when I remove the user and password fields.
Hello.
I've been messing around with various email sending solutions for nodejs and after trying to use nodemailer now I'm getting the same issue with emailjs.
I'm using the following:
windows 32bit XP
nodejs 0.6.19
the latest emailjs (installed with npm --force)
precompiled windows binaries for buffertools from here https://github.com/springmeyer/node-buffertools/tree/win-binary (basically, I just deleted the content of "emailjs\node_modules\buffertools" and unpacked the archived files from the above mentioned repository into it)
This is the code I'm currently using to send some test emails
var email= require("emailjs"),
server= email.server.connect({
user: "[email protected]",
password: "sender_password",
host: "smtp.gmail.com",
ssl: true
});
server.send({
text: 'www.google.com Confirm',
from: "Sender <[email protected]>",
to: "[email protected]",
subject: "test confirmation",
attachment: [
{
data: '<a href="www.google.com">Confirm</a>',
alternative: true
}
]
}, function(e, r){
console.log(e);
console.log(r);
});
This is my console log
Express server listening on port 8080 in development mode
null
{ attachments: [],
alternative:
{ data: 'Confirm',
alternative: true,
charset: 'utf-8',
type: 'text/html',
inline: true },
header:
{ 'message-id': '1339153866494.0.1600@PC',
from: 'Sender [email protected]',
to: '[email protected]',
subject: 'test confirmation' },
content: 'text/plain; charset=utf-8',
text: 'www.google.com Confirm' }
null
{ attachments: [],
alternative:
{ data: 'Confirm',
alternative: true,
charset: 'utf-8',
type: 'text/html',
inline: true },
header:
{ 'message-id': '1339153986421.1.1600@PC',
from: 'Sender [email protected]',
to: '[email protected]',
subject: 'test confirmation' },
content: 'text/plain; charset=utf-8',
text: 'www.google.com Confirm' }
I received two emails on my gmail account, the second coming in 2 minutes after the first has arrived. On my client side javascript I have a function waiting for server response, it times out after additional 2 minutes, making a total of 4 after sending the first email.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.