高难问题!!!!!!!!!

baal_zf 2002-12-15 02:35:21
用java 发送mail .
用公司的服务器作为mail 服务器.
发觉只能给mail 地址是本公司的发送邮件,
不能发送给公司以外的mail地址发送邮件.

程序片段如下
public String dcSendMailForFiles(String from_id, String[] to_id,String cc_id[], String[] bcc_id,
String title, String msgbody ,String[] fileNames ,String[] true_file_name)
{
DCF504S0 envInf = new DCF504S0();
if((to_id == null || java.lang.reflect.Array.getLength(to_id) == 0)&&
(bcc_id == null || java.lang.reflect.Array.getLength(bcc_id) == 0))
return("0");

//if(envInf.getDCemailFlg() == false)
//return("0");

String emailHostIP = envInf.getDCemailHostIP();
if(emailHostIP == null || emailHostIP.length() <= 0)
return("0");
Properties props = new Properties();
props.put("mail.smtp.host", emailHostIP);
Session session = Session.getDefaultInstance(props, null);
try {
// create a message
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from_id));
if(to_id != null && java.lang.reflect.Array.getLength(to_id) > 0)
{
InternetAddress[] address = new InternetAddress[java.lang.reflect.Array.getLength(to_id)];
for(int i = 0; i < java.lang.reflect.Array.getLength(to_id); i++)
{
address[i] = new InternetAddress(to_id[i]);
}
msg.setRecipients(javax.mail.Message.RecipientType.TO, address);
}

if(cc_id != null && java.lang.reflect.Array.getLength(cc_id) > 0)
{
InternetAddress[] ccAddress = new InternetAddress[java.lang.reflect.Array.getLength(cc_id)];
for(int i = 0; i < java.lang.reflect.Array.getLength(cc_id); i++)
{
ccAddress[i] = new InternetAddress(cc_id[i]);
}
msg.setRecipients(javax.mail.Message.RecipientType.CC, ccAddress);
}

if(bcc_id != null && java.lang.reflect.Array.getLength(bcc_id) > 0)
{
InternetAddress[] bccAddress = new InternetAddress[java.lang.reflect.Array.getLength(bcc_id)];
for(int i = 0; i < java.lang.reflect.Array.getLength(bcc_id); i++)
{
bccAddress[i] = new InternetAddress(bcc_id[i]);
}
msg.setRecipients(javax.mail.Message.RecipientType.BCC, bccAddress);
}

msg.setSubject(title);

// create the Multipart and its parts to it
Multipart mp = new MimeMultipart();

// create and fill the first message part
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(msgbody, "Shift_JIS");
mp.addBodyPart(mbp1);

if(fileNames != null && java.lang.reflect.Array.getLength(fileNames) > 0)
{
for(int i = 0; i < java.lang.reflect.Array.getLength(fileNames); i++)
{
// create the second message part
MimeBodyPart mbp2 = new MimeBodyPart();

// attach the file to the message
FileDataSource fds = new FileDataSource(fileNames[i]);
mbp2.setDataHandler(new DataHandler(fds));
// mbp2.setFileName(fds.getName());
MimeBodyPartForDC mbp2_dc = new MimeBodyPartForDC();
//mbp2_dc.setFileName( (MimePart)mbp2, fds.getName(), "iso-2022-jp");
mbp2_dc.setFileName( (MimePart)mbp2,true_file_name[i], "iso-2022-jp");
mp.addBodyPart(mbp2);
}
}
// add the Multipart to the message
msg.setContent(mp);

// set the Date: header
msg.setSentDate(new Date());

// send the message
Transport.send(msg);
return("0");
} catch (Exception mex) {
return(mex.toString());
}
}



我不太清楚是不是因为没有设置端口号,用户明,密码的缘故.
可是当我做了如下修改后,发现还是不能向外部发信.

Transport trans = session.getTransport("smtp");
trans .connect("emailHostIP ",port,"userName","password");
trans .send(msg);
...全文
52 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexll 2002-12-16
  • 打赏
  • 举报
回复
人兄的代码是用什么编辑器写出来的?
colors 2002-12-16
  • 打赏
  • 举报
回复
可不可以加上解释啊!!
xx8081 2002-12-16
  • 打赏
  • 举报
回复
全给你了,自己看看有没有用。
一、我们可以通过任何支持sun规范中的sun.net.smtp包的JSP引擎(如JSWDK)发送mail。
(警告:使用内置的internal Sun规范包,这将影响到你的jsp程序的可移植性。)
以下scriptlet利用SmtpClient类在jsp文件中发送email。

<%@ page import="sun.net.smtp.SmtpClient, java.io.*" %>
<%
String from="gseshadri@hotmail.com";
String to="govind@jguru.com, govi@bigfoot.com";
try{
SmtpClient client = new SmtpClient("mail.xxxxx.xxx");
client.from(from);
client.to(to);
PrintStream message = client.startMessage();
message.println("To: " + to);
message.println("Subject: Sending email from JSP!");
message.println("This was sent from a JSP page!");
message.println();
message.println("Cool beans! :-)");
message.println();
message.println("Govind Seshadri");
message.println("jGuru.com");
message.println();
client.closeServer();
}
catch (IOException e){
System.out.println("ERROR SENDING EMAIL:"+e);
}
%>


二、 JavaMail是官方的 Java mail API,可参考 http://java.sun.com/products/javamail/。虽然该API比 sun.net.smtp.SmtpClient更丰富或者说更复杂,但它是可移植的。这里重新创建了一个 MailSender类,它包含了 JavaMail API。如下所示:


// ms_ prefix is for MailSender class variables
// str prefix is for String
// astr prefix is for array of Strings
// strbuf prefix is for StringBuffers, etc.
public MailSender(
String strFrom, // sender
String[] astrTo, // recipient(s)
String[] astrBCC, // bcc recipient(s), optional
String strSubject, // subject
boolean debugging)
{
ms_strFrom = strFrom; // who the message is from
ms_astrTo = astrTo; // who (plural) the message is to
ms_debugging = debugging; // who (plural) the message is to

// set the host
Properties props = new Properties();
props.put("mail.smtp.host", ms_strSMTPHost);

// create some properties and get the default Session
Session session = Session.getDefaultInstance(props, null);
session.setDebug(ms_debugging);

try {
// create a message
ms_msg = new MimeMessage(session);

// set the from
InternetAddress from = new InternetAddress(strFrom);
ms_msg.setFrom(from);

// set the to
InternetAddress[] address = new InternetAddress[astrTo.length];
for (int i = 0; i astrTo.length; ++i)
{
address[i] = new InternetAddress(astrTo[i]);
}
ms_msg.setRecipients(Message.RecipientType.TO, address);

// set the bcc recipients
if (astrBCC != null)
{
address = new InternetAddress[astrBCC.length];
for (int i = 0; i astrBCC.length; ++i)
{
eh.dbg("astrBCC[" + i + "] is: '" + astrBCC[i] + "'");
address[i] = new InternetAddress(astrBCC[i]);
}
ms_msg.setRecipients(Message.RecipientType.BCC, address);
}

// set the subject
ms_msg.setSubject(strSubject);

// set up the string buffer which will hold the message
ms_strbufMsg = new StringBuffer();

} catch (MessagingException mex) {
mex.printStackTrace(System.err);
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}

public void ms_add(String strText)
{
ms_strbufMsg.append(strText);
}

public void ms_send()
{
try {
// set the content as plain text
ms_msg.setContent(new String(ms_strbufMsg), "text/plain");

// and away
Transport.send(ms_msg);
} catch (Exception ex) {
System.out.println("Caught exception in MailSender.ms_send: " + ex);
}

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧