Как определить java.lang.String[]
внутри Matlab?
У меня есть код Java ( ref. ), скомпилированный с использованием javac
и jar
, для отправки писем через сервер.
При вызове метода main
из командной строки код работает так, как задумано, с одним вложением.
При вызове метода main
из Matlab через javaaddpath
с:
X=SendEmail;
X.main('');
A noname
вложение добавлено (?!) вместе с исходным файлом.
Меня больше всего беспокоит то, что Matlab преобразует java.lang.String[]
в другой объект, более подходящий для Matlab, и при вызове метода java main
массив строк повреждается, добавляя мусор в процессе.
Подробности
SendEmail.java
Полный код
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeBodyPart;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
public class Test {
private Properties emailProperties;
private Session mailSession;
private MimeMessage emailMessage;
public String[] toEmails={"Admin <admin@example.com>"};
public String emailSubject="Subject";
public String emailBody="";
public String htmlText= "Subject<br>";
public String txtContentID="<image1>";
public String txtImage="Example.png";
public String emailHost="example.com";
public String fromUser="admin@example.com";
public String fromUserEmailPassword="mypassword";
public String sPort="587";
public String sXMailer="Example";
public String sMID="20200618235959.00.admin@example.com";
public String fromEmail="admin@example.com";
public String fromName="Admin";
public String sReturnEmail="Admin <admin@example.com>";
public String[] txtAttachment = {"File.txt"}; //PROBLEM??
public String[] txtAttachmentName = {"File.txt"};
public static void main(String args[]) throws AddressException,
MessagingException {
System.out.println("Test");
SendEmail javaEmail = new SendEmail();
javaEmail.send();
}
public void send() throws AddressException,
MessagingException {
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port",sPort);
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
if (!(toEmails==null))
for (int i=0;i<toEmails.length;i++){
emailMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
emailMessage.setHeader("X-Mailer",sXMailer);
emailMessage.setHeader("Return-path",sReturnEmail);
emailMessage.setHeader("Return-Path",sReturnEmail);
emailMessage.setHeader("Envelope-from",sReturnEmail);
try {
emailMessage.setFrom(new InternetAddress(fromEmail,fromName));
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
MimeMultipart multipart = new MimeMultipart("related");
BodyPart messageBodyPart1 = new MimeBodyPart();
messageBodyPart1.setContent(htmlText, "text/html; charset=utf-8");
messageBodyPart1.setDisposition(MimeBodyPart.INLINE);
multipart.addBodyPart(messageBodyPart1);
BodyPart messageBodyPart2 = new MimeBodyPart();
DataSource fdsImage = new FileDataSource(txtImage);
messageBodyPart2.setDataHandler(new DataHandler(fdsImage));
messageBodyPart2.setHeader("Content-ID",txtContentID);
messageBodyPart2.setDisposition(MimeBodyPart.INLINE);
multipart.addBodyPart(messageBodyPart2);
MimeMultipart multipart2 = new MimeMultipart();
BodyPart rbp = new MimeBodyPart();
rbp.setContent(multipart);
multipart2.addBodyPart(rbp);
for (int i=0;i<txtAttachment.length;i++){
BodyPart messageBodyPart3 = new MimeBodyPart();
DataSource fdsAttachment = new FileDataSource(txtAttachment[i]);
messageBodyPart3.setDataHandler(new DataHandler(fdsAttachment));
messageBodyPart3.setFileName(txtAttachmentName[i]);
messageBodyPart3.setDisposition(MimeBodyPart.ATTACHMENT);
multipart2.addBodyPart(messageBodyPart3);
}
emailMessage.setContent(multipart2);
System.out.println("Sending Email...");
Transport transport=mailSession.getTransport("smtp");
transport.connect(emailHost,fromUser,fromUserEmailPassword);
emailMessage.saveChanges();
emailMessage.setHeader("Message-ID",sMID);
transport.sendMessage(emailMessage,emailMessage.getAllRecipients());
transport.close();
}
}
jar
Компиляция
javac -target 1.7 -source 1.7 -bootclasspath 'C:\Program Files\MATLAB\R2018a\sys\java\jre\win64\jre\lib\rt.jar' 'SendEmail.java' -cp 'javax.activation.jar;javax.mail.jar'
jar
Выполнение
java -cp javax.activation.jar;javax.mail.jar;SendEmail.jar SendEmail