附件到电子邮件?

时间:2010-11-29 13:25:11

标签: java

我有类似以下内容......

   public boolean sendmail (String host, String to, String from,
String message, String subject, String cc){
      try
      {
         //Created TCP Connection to server
         Socket s = new Socket(host, 25);
         //Open our streams.
         InputStream inStream = s.getInputStream();
         OutputStream outStream = s.getOutputStream();
         in = new Scanner(inStream);
         out = new PrintWriter(outStream, true );
         //get my info!
         String hostName = InetAddress.getLocalHost().getHostName();
         //e-mail time!

         receive();
         send("HELO" + host);
         receive();
         send("MAIL FROM: <" + from + "\n");
         receive();
         send("RCPT TO: <" + to + "\n");
         receive();
         send("DATA");
         receive();
         send("DATA");
         receive();
         //Make sure to close the everything again!!
         out.close();
         in.close();
         s.close();
         return true;
      }
      catch (Exception e)
      {
          appendtolog("ERROR: " + e);
          return false;
      }
   }

private void send(String s) throws IOException{
    appendtolog(s);
    out.print(s.replaceAll("\n", "\r\n"));
    out.print("\r\n");
    out.flush();
}

private void receive(){
    String line = in.nextLine();
    appendtolog(line);
}

是否可以在附近的某处放置附件?我意识到有更多的方法可以使用API​​来实现这一点,但我想知道有哪些方法可以将附件的功能锤入其中或使用类似的东西。

// Set the email attachment file
MimeBodyPart attachmentPart = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(filename) {
@Override
public String getContentType() {
  return "application/octet-stream"; 
}
 };
 attachmentPart.setDataHandler(new DataHandler(fileDataSource));
  attachmentPart.setFileName(filename);

2 个答案:

答案 0 :(得分:2)

我建议回到基础并阅读这篇文章。

互联网邮件格式 http://www.faqs.org/rfcs/rfc2822.html

多用途Internet邮件扩展(MIME)第一部分:Internet邮件主体的格式 http://www.faqs.org/rfcs/rfc2045.html

这些或多或少是直截了当的,那里有一些神秘的东西,但你应该能够满足你的需要。

我建议尽可能地将通信(你已经上面提到的)与正文(消息内​​容)分开,否则你会把水弄得一团糟。

希望有所帮助。

答案 1 :(得分:1)

显然这是可能的,但我建议您使用JavaMail API而不是处理SMTP协议的细节。除非您正在实施学生练习,否则这是正确的。