Greetings - I’m writing a security application. It monitors certain hardware and maintains a log of the readings. Every midnight, it needs to email a copy of the previous 24 hour log to the department head. I am using XOJO 2017R1. It is a VERY large building that I cannot reveal at this point; I suspect that they have their own mail sever. I know that I need to find out the server name is, what port number it uses and what the security requirements are.
M y first question has to do with port number and privileges. It appears that ports 25, 110, or 587 are the ones most likely to be needed. Under SocketCore.LastErrorCode, the LR says: you can only bind to ports less than 1024 if you have root privileges. A normal Admin user does not have root privileges. But, under SocketCore.Port, it says: On most operating systems, attempting to bind to a port less than 1024 causes a Error event to fire with an error number 107 unless the application is running with administrative permissions. Which one is it, and how do insure that the application is running under the correct privileges (Mac for testing and Win for use target)?
The second question has to do with SMTPSecureSocket. This appears to be needed with Port 587. The first hurdle, here, is that I do not understand the statement: If you use a constructor in a subclass of a SMTPSecureSocket, you must call the Super class’s constructor in your subclass’s constructor. The subclass will not work unless this is done. The second hurdle is actually how to use it and how to deal with SSL Certificate? Is this something that has to be acquired? If so, where? Or, is there some sort of blanket certificate available for XOJO apps? Finally, where can I see an example using SMTPSecureSocket? That would really help!
You do not need special privileges to connect to a port, regardless of the port number. “Binding” to a port (AKA “listening”) is something that happens when your socket is accepting inbound connections. But your app wants to initiate an outbound connection to a mail server (and it’s the server that has to worry about binding and permissions.)
Constructor methods are a special method of a class that gets called automatically when you create an instance of the class. All Xojo socket classes do some necessary initialization work in their Constructor methods. If you override the Constructor in a subclass then you must make sure to call Super.Constructor() so that this initialization can be done.
Super.Constructor() // execute the superclass Constructor
// your initialization code here
If you aren’t overriding the Constructor then you don’t need to worry about this.
I have had problems with trying to connect an smtpsecuresocket to a non-ssl smtp server.
I had to make a test, instanciating a smtpsocket or smtpsecuresocket myself depending on the secure property.
it may be a problem from the starttls that you cannot clear.
@James Wagner - did you try the example in the Examples folder that @Jean-Yves Pochez mentioned? the SendDemoWindow has complete code that works really well. You can just drag the MailSocket control into your project, configure it and run it. It even gives you errors to help you troubleshoot.