Определите `java .lang.String []` внутри Matlab - PullRequest
1 голос
/ 19 июня 2020

Как определить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...