If you use gmail for your company, you can run your own email campaign without paying those email campaign companies. Write a small script or Java program to pull user data from your database and create a pretty HTML based email template. If you want to track them, insert the tracking in the HTML content. Use the following code to start sending emails to your users. Just be sure not to abuse the gmail account.
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class Mailman extends javax.mail.Authenticator
{
private String smtpServer;
private String from;
private String password;
private boolean useAuth;
public Mailman(String sender)
{
from = sender;
smtpServer = "smtp.gmail.com";
}
public String getSmtpServer() { return smtpServer; }
public void setSmtpServer(String svr) { smtpServer = svr; }
public String getSender() { return from; }
public void setSender(String fm) { from = fm; }
public String getPassword() { return password; }
public void setPassword(String passwd) {
password = passwd;
if (passwd != null && passwd.length() > 0) {
useAuth = true;
} else {
useAuth = false;
}
}
/*
* This method sends plain text mail.
*/
public void send(String subject, String body, String to, String cc)
{
try
{
Message msg = createMessage(subject, to, cc);
msg.setText(body);
Transport.send(msg);
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
/*
* this method sends mail with file attachments
*/
public void send(String subject, String body, List<String> attachPaths, String to, String cc)
{
try
{
Message msg = createMessage(subject, to, cc);
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(body);
multipart.addBodyPart(messageBodyPart);
for (String fileAttachment : attachPaths) {
MimeBodyPart attachment = new MimeBodyPart();
DataSource source = new FileDataSource(fileAttachment);
attachment.setDataHandler(new DataHandler(source));
attachment.setFileName(new File(fileAttachment).getName());
multipart.addBodyPart(attachment);
}
msg.setContent(multipart);
Transport.send(msg);
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
protected Message createMessage(String subject, String to, String cc) throws Exception
{
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpServer);
Session session = null;
if ( useAuth ) {
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");
// SSL
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
session = Session.getInstance(props, this);
} else {
session = Session.getInstance(props);
}
// create a new message
Message msg = new MimeMessage(session);
if (from == null) {
from = System.getProperty("user.name");
}
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
if (cc != null) {
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc, false));
}
// set the subjecttext
msg.setSubject(subject);
// set some other header information
msg.setHeader("X-Mailer", "s3ar-JavaMail");
msg.setSentDate(new Date());
return msg;
}
@Override
public PasswordAuthentication getPasswordAuthentication()
{
// you can read the password from a file
// which should set mode as 0400
return new PasswordAuthentication(from, password);
}
}